1

我正在使用 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 中时,它的行为会有所不同。有谁知道这里可能是什么问题?

4

1 回答 1

4

JBoss 使用此处的 RI:http: //stax.codehaus.org/Home作为 STAX 提供程序。我猜JDK可能默认使用SJSXP。

由于toString()API 上没有指定的行为XMLEvent,因此打印输出的感觉取决于实现。有些实现转储普通的 old Object#toString(),有些可能写出 XML 等。实际上,您依赖于 javax 包接口未指定的实现细节。

您可以通过在开发环境中使用 codehaus stax 实现来获得一致的行为,但当然您仍在使用供应商特定的功能。

(过去,当 Sun 更改提供程序时,其他 XML API 也出现了这个问题。org.w3c.dom.Element 用于从 toString 打印 XML,但这是提供程序的行为,然后有一天它改变了,很多人的代码坏了!)

于 2011-05-03T19:50:16.000 回答