java - 有效 XML 上的 XMLStreamException
问题描述
我目前面临一个奇怪的问题,这并不经常发生。我的应用程序使用带有 JAXB 的 STaX 和XMLStreamReader
具有数百万行的 Java-Streams ( ) 解组 XML 文件,如果 XML 已更改,则在启动时将这些对象导入数据库。到目前为止,这一切正常,但在某些设备上除外(大约 5% 的设备超过 1000 台)。在这些设备上,我得到了一个javax.xml.stream.XMLStreamException
. 有时重新启动会有所帮助,并且可以成功处理 XML。XML 本身在所有设备上始终具有相同的内容,因此XML 和 XSD 都是有效的。
异常也不总是发生在同一个地方。例如:
原因:javax.xml.stream.XMLStreamException: ParseError at [row,col]:[ 2650616 ,17] 消息:元素类型“XX”必须后跟属性规范“>”或“/>”。
之后:
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[ 3272359,14 ] 消息:元素类型“XY”必须后跟属性规范“>”或“/>”。]
整个应用程序运行在微服务架构中,但不依赖于其他服务。启动时会发生很多事情,因为每个微服务都会初始化自己的状态。对我来说,似乎可能存在一些内存问题,因为它不可重现,并且设备上的微服务在它们的版本上没有区别。
在优化解组过程之前,我希望能够首先重现该问题以确保任何改进都有效。当我尝试减少 Xmx 和 Xms 时,我可能会得到OutOfMemoryException
但永远不会XMLStreamException
。
现在我在问自己,
- 何时以及为什么会
XMLStreamException
发生,我怎样才能重现这种行为? - 为什么这可能不经常发生,因为所有设备都应该相同?
- 我应该切换到内存效率更高的 SAX 吗?
感谢您提前提供的所有帮助。
解决方案
推荐阅读
- python - 使用python的数据透视表
- amazon-dynamodb - 现有索引的更新约束
- arrays - 如何在 UIPickerView 中显示所需的行?
- java - 在 CloudHub 设置中有效的属性在属性文件中无效
- python - 需要降级熊猫版本,但我收到“ModuleNotFoundError”错误
- servicestack - 无法使用 JsonServiceClient 从 ServiceStack API 获取
- spring-boot - Docker 映射端口无效
- curl - Nexus Repo Manager - 如何根据 Repo 名称获取角色?
- python-3.x - 如何使用命名参数翻译 typedef 回调?
- spss - DO IF 框架内的多个 OR 条件评估为 SYSMIS