我使用的是 java 6,rt.jar 具有进行基于 STaX 的解析所需的所有类。我主要使用以下类:
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.events.XMLEvent;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
当我将以下内容作为 java 应用程序运行时:
while(reader.hasNext()) {
XMLEvent elementsEvent = reader.nextEvent();
System.out.println(elementsEvent.toString());
--------
}
它按预期工作,但是当我将其部署到 JBoss 中时,它的行为有所不同。有谁知道这里可能是什么问题?
最佳答案
JBoss 使用此处的 RI:http://stax.codehaus.org/Home对于 STAX 提供商。我猜 JDK 可能默认使用 SJSXP。
由于 toString()
的行为未在 XMLEvent
的 API 上指定,因此打印出来的感觉取决于实现。有些实现会转储普通的旧 Object#toString()
,有些可能会写出 XML 等。实际上,您依赖于 javax 包接口(interface)未指定的实现细节。
您可以通过在开发环境中使用 codehaus stax 实现来获得一致的行为,但当然您仍在使用特定于供应商的功能。
(在过去,当 Sun 更改提供者时,其他 XML API 也出现了这个问题。org.w3c.dom.Element 用于从 toString 打印 XML,但它是提供者行为,然后有一天它改变了并且很多人的代码都坏了!)
关于java - STaX 解析器表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5874535/