2011-05-03 71 views
1

我正在使用java 6並且rt.jar具有執行基於STaX解析所需的所有類。主要是我使用以下類: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的這一點,表現不同。有誰知道這裏可能是什麼問題?

+3

你打算告訴我們的不僅僅是「它的行爲不同」嗎? – skaffman 2011-05-03 19:57:03

+0

在執行SUN的情況下,上面的代碼打印xml文件中的文本,而在JBoss的情況下打印EventType – 2011-05-04 09:56:05

+0

這是因爲'toString()'是作爲人類可讀的表示。你不應該把它用於「真實」的東西。 – skaffman 2011-05-04 10:39:24

回答

4

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

由於在XMLEvent的API上沒有指定toString()的行爲,所以它的實現取決於打印出來的結果。有些實現會轉儲普通的舊的Object#toString(),有些實現可能會寫出XML等。實際上,您依賴的是javax包接口未指定的實現細節。

通過在開發環境中使用codehaus stax實現,您可以獲得一致的行爲,但當然您仍然使用供應商特定的功能。這個問題已經在過去與其他XML API一起出現了,當Sun改變了提供者。org.w3c.dom.Element用於從toString打印XML,但它是提供者行爲,然後有一天它改變了和許多人的代碼打破了!)

+0

謝謝感動,這是確切的問題,解決這個問題的方法是使用toString() – 2011-05-08 17:40:11