STaX解析器表现不同

时间:2011-05-03 19:22:16

标签: 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时,它的行为有所不同。有谁知道这可能是什么问题?

1 个答案:

答案 0 :(得分:4)

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

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

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

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