XMLEventReader returns STAX

XMLEventReader returns STAX

我正在使用 XMLEventReader 来解析大 xml 文件,它在一个项目中工作正常,但是当我使用相同的导入导入相同的 class在另一个项目中,它没有很好地解析 xml,它给出了 STAX Event.

下面是我的代码:

    XMLInputFactory factory = XMLInputFactory.newInstance();
    XMLEventReader eventReader = factory.createXMLEventReader(new FileReader(exportedFilePath));

我调试并检查了 eventReader,在 属性 中工作的项目中是 f,在不工作的项目中是 m.

我无法捕获异常,因为它是相同的 class 和相同的导入..

以下是导入:

import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.Characters;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.Namespace;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;

可能是类路径问题引起的。

可能是在您的 class 之前加载了另一个具有相同名称的 class(它甚至可能在框架内或在运行时环境中)阻止加载您引用的 class,例如不同版本的 stax 解析器。

您有三个选择:

  • 尝试找出该环境中存在的 StAX 解析器的版本,并根据它编译您的代码

  • 为您的库使用自己的 classloader/container,这将保证加载正确的版本,

  • 尝试重新排序 class你的 lib 排在第一位的路径 - 虽然它可能会破坏其他地方的系统,所以我真的不推荐。

这应该有帮助:

System.setProperty("javax.xml.stream.XMLInputFactory", "com.sun.xml.internal.stream.XMLInputFactoryImpl");