java - STaX 解析器表现不同

标签 java xml xml-parsing stax

我使用的是 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/

相关文章:

java - 如何构建具有多个变量的随机对象?

xml - 使用 XSLT 排序

android - 完全限定标记内的 XML 代码中没有代码完成

c# - 读取/解密加密的XML文件,然后进行内部处理

java - 使用 Woodstox 解析器解析 '&' 字符时出错

java - ArrayAdapter 中带有按钮的自定义 View

java - 面向对象语言(如 Java)中的嵌入式 SQL

java - XMLPullParser Android 属性测试

java - VTD-XML : XMLModifier. output() 抛出 IndexOutOfBoundsException

java - ClassNotFoundException:没有找到类 "com.yandex.metrica.MetricaEventHandler"。统一插件