有效XML上的XMLStreamException



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

例外情况也不总是发生在同一个地方。例如:

由以下原因引起:javax.xml.stream.XMLStreamException:[row,col]处的ParseError:[2650616,17]消息:元素类型";XX";必须跟在属性规范之后>quot;或"/>";。

稍后:

[javax.xml.stream.XMLStreamException:[行,列]处的ParseError:[3272359,14]消息:元素类型";XY";必须跟在属性规范之后>quot;或"/>quot;.]

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

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

现在我在问自己,

  • XMLStreamException发生的时间和原因以及我如何再现这种行为
  • 既然所有设备都应该相同,为什么这种情况可能不经常发生
  • 我应该切换到内存效率更高的SAX吗

感谢您提前提供的所有帮助。

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

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

  2. 错误表明流不是格式良好的XML。(从技术上讲,文本数据甚至不是XML;它会导致预验证解析错误。(

  3. 下面是一个格式不好的XML的简单例子,它会产生这样的错误:

    <r a='''/>
    

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

正如@vanje在评论中提到的,记录下一步调试问题时失败的确切XML。

另请参阅

  • 简化的XML转义
  • 在';有效的xml';和';格式良好的xml'

相关内容

  • 没有找到相关文章

最新更新