Woodstox STAX と Java 1.6 STAX の実装の間で奇妙な実行時競合が発生しています。私は CXF を使用しているため、依存関係の一部として Woodstox jar をプルしています。これが私が使用しているサンプルコードです。
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.EndElement;
import javax.xml.stream.events.StartElement;
import javax.xml.stream.events.XMLEvent;
XMLInputFactory factory = (XMLInputFactory)XMLInputFactory.newInstance();
XMLEventReader reader =
factory.createXMLEventReader(new StringReader(xml));
while (reader.hasNext()){
XMLEvent event = reader.nextEvent();
switch (event.getEventType()){
case XMLEvent.START_ELEMENT :
StartElement se = event.asStartElement();
...........
...........
case XMLEvent.END_ELEMENT :
EndElement endElement = event.asEndElement();
if (event.asEndElement().getName().getLocalPart()==("document"))
// do something
実行時に、次の例外が発生します。
java.lang.Exception: java.lang.ClassCastException: com.ctc.wstx.evt.CompactStartElement cannot be cast to javax.xml.stream.events.EndElement
ラインに到達したときEndElement endElement = event.asEndElement();
失敗しないのに、なぜこの時点で原因になっているのか、私はちょっと困惑しています
StartElement se = event.asStartElement();
デバッグ中に、イベント オブジェクトが com.ctc.wstx.evt パッケージの一部であり、javax.xml.stream ではないことがわかりました。しかし、以前に失敗しなかった理由がわかりません。
どんなポインタでも高く評価されます。