2011-05-03 2 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; 

내가 자바 응용 프로그램으로 다음 실행할 때 : 나는 보스에이를 배포 할 때

예상대로 작동
while(reader.hasNext()) {    
XMLEvent elementsEvent = reader.nextEvent(); 
System.out.println(elementsEvent.toString()); 
-------- 
} 

,하지만 그것을 다르게 동작합니다. 누가 여기에 문제가 될지 아는 사람 있습니까?

+3

"다르게 행동하는 것"이상으로 우리에게 말하고 싶습니까? – skaffman

+0

SUN 구현의 경우 위의 코드는 xml 파일의 텍스트를 인쇄하고 JBoss의 경우 EventType –

+0

을 인쇄합니다. 이는 toString()이 사람이 읽을 수있는 표현이기 때문입니다. "진짜"물건을 위해 그것을 사용해서는 안됩니다. – skaffman

답변

4

JBoss는 STAX 공급자에 대해 http://stax.codehaus.org/Home의 RI를 사용합니다. 아마도 JDK는 기본적으로 SJSXP를 사용하고있을 것입니다.

의 동작이 XMLEvent에 대한 API에 지정되어 있지 않으므로 인쇄하는 것처럼 느껴지는 것은 구현에 달려 있습니다. 일부 구현은 오래된 old Object#toString()을 덤프하고, 일부는 XML을 작성할 수 있습니다. 실제로 javax 패키지 인터페이스에서 지정하지 않은 구현 세부 정보를 사용하고 있습니다.

개발 환경에서 codehaus stax 구현을 사용하여 일관된 동작을 얻을 수 있지만 물론 여전히 공급 업체별 기능을 사용하고 있습니다.

(이 문제는 Sun이 공급자를 변경했을 때도 다른 XML API와 함께 과거에는 너무 복잡해졌습니다. org.w3c.dom.Element는 XML을 toString에서 인쇄하는 데 사용되었지만 공급자 동작이었고 언젠가는 변경되었습니다. 많은 사람들의 코드가 깨졌습니다!)

+0

감사의 말 :이게 정확한 문제 였고 해결책은 toString()을 사용하지 않는 것입니다. –

관련 문제