gpt4 book ai didi

java - 有效 XML 的 XMLStreamException

转载 作者:行者123 更新时间:2023-12-05 07:03:49 24 4
gpt4 key购买 nike

我目前面临一个奇怪的问题,这种问题并不经常发生。我的应用程序使用带有 JAXB 的 STaX 和 Java-Streams (XMLStreamReader) 解编一个具有数百万行的 XML 文件,如果 XML 已更改,则在启动时将这些对象导入数据库。到目前为止,这是正常工作的,除了在某些设备上(大约 5% 的超过 1000 台设备)。在这些设备上,我收到了 javax.xml.stream.XMLStreamException。有时重新启动会有所帮助并且可以成功处理 XML。 XML 本身在所有设备上始终具有相同的内容,因此 XML 和 XSD 都是有效的

异常也不总是发生在同一个地方。例如:

Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[2650616,17]Message: Element type "XX" must be followed by either attribute specifications, ">" or "/>".

后来:

[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[3272359,14]Message: Element type "XY" must be followed by either attribute specifications, ">" or "/>".]

整个应用程序运行在微服务架构中,但不存在对其他服务的依赖。在启动时会发生很多事情,因为每个微服务都会初始化自己的状态。对我来说,似乎可能存在一些内存问题,因为它不可重现,并且设备上的微服务在版本上没有差异。

在优化解码过程之前,我希望能够首先重现该问题以确保任何改进都有效。当我尝试减少 Xmx 和 Xms 时,我可能会得到 OutOfMemoryException 但永远不会 XMLStreamException

现在我在问自己,

  • 何时以及为什么会发生 XMLStreamException 以及如何重现此行为?
  • 为什么这种情况不会经常发生,因为所有设备都应该相同?
  • 我应该改用内存效率更高的 SAX 吗?

提前感谢所有帮助。

最佳答案

您的问题中没有足够的信息来给出明确的答案,但我们可以帮助您深入研究这个问题。

  1. 您看到的变化几乎可以肯定是由于输入变化,而不是设备故障。

  2. 错误表明流不是 well-formed XML。 (文本数据在技术上什至不是 XML;它会导致预验证解析错误。)

  3. 这是一个会产生此类错误的格式不正确的 XML 的简单示例:

    <r a='''/>

    请注意,属性值中有一个未转义的 '。当代码从源中提取数据、未能将其转义并将其写入属性值时,很容易发生这种情况。可变性将来自数据可变性。例如,大多数名称中没有 ',但 O'Toole 有。

记录失败的确切 XML 作为调试问题的下一步,如 mentioned @vanje 在评论中发表。

另见

关于java - 有效 XML 的 XMLStreamException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63114061/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com