【问题标题】:XMLEventReader returns STAXXMLEventReader 返回 STAX
【发布时间】:2019-06-19 02:40:36
【问题描述】:

我正在使用 XMLEventReader 来解析大的 xml 文件,它在一个项目中运行良好,但是当我在另一个项目中导入具有相同导入的相同类时,它不能很好地解析 xml,它给出了STAX Event.

下面是我的代码:

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

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

我无法捕捉到异常,因为它是相同的类和相同的导入。

这里是导入:

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;

【问题讨论】:

  • 类路径问题?它可能是由在您的类之前加载的另一个同名类引起的(它甚至可能在框架内或运行时环境中)
  • 我不明白是什么问题。我知道您有两个不同的实现(第一个项目中的 Woodstox,第二个项目中的 JDK 的默认实现),我可以向您解释为什么会发生这种情况(例如 stackoverflow.com/questions/17807123/…),但我不明白您的问题/问题是什么...你能编辑问题告诉我们吗?

标签: java stax


【解决方案1】:

这应该会有所帮助:

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

【讨论】:

    【解决方案2】:

    可能是类路径问题造成的。

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

    您有三个选择:

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

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

    • 尝试重新排序你的 lib 优先的类路径 - 尽管它可能会破坏其他地方的系统,所以我不建议这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-02
      • 2017-05-12
      • 1970-01-01
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      • 2017-02-21
      • 2015-06-13
      相关资源
      最近更新 更多