Prev / Next / たまにっき。

Java で StAX

Category: [Java][XML]
2007-10-26

Java 5 で動かす Reference Implementation と Java SE 6 の挙動が違う...

    :
XMLEventReader reader = ....
String hogehogeValue = null;
while(reader.hasNext()){
    XMLEvent event = reader.peek();
    if(event.isStartElement()){
        StartElement startElement = event.asStartElement();
        String tagName = startElement.getName().getLocalPart();
        if(tagName.equals("hogehoge")){
            hogehogeValue = reader.getElementText();
        }
        :
    }
    :
    reader.nextEvent();


こんな感じのプログラムで,Java 5では正常に動作する.
しかし,Java SE 6 で動かすと上記の9行目,reader.getElementText()を実行したときに,以下のExceptionが発生する.

javax.xml.stream.XMLStreamException: ParseError at [row,col]:[4,11]
Message: parser must be on START_ELEMENT to read next text
at com.sun.xml.internal.stream.XMLEventReaderImpl.getElementText(Unknown Source)
    :


上記コードの 4 行目 reader.peek() を reader.nextEvent() に最後の一行 reader.nextEvent() を削除すると Java SE 6 で意図通りになる.
ただし,Java 5 で実行すると

javax.xml.stream.XMLStreamException: Precondition for readText is nextEvent().getTypeEventType() == START_ELEMENT (got 4)
at com.bea.xml.stream.XMLEventReaderBase.getElementText(XMLEventReaderBase.java:87)
    :


になる.なんでこんな根本的な挙動が変わるんだよー.うっざー.

Category: [Java][XML]