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)
:
になる.なんでこんな根本的な挙動が変わるんだよー.うっざー.