Я столкнулся со странным конфликтом во время выполнения между Woodstox STAX и реализацией java 1.6 STAX. Поскольку я использую CXF, он извлекает банку Woodstox как часть своей зависимости. Вот пример кода, который я использую.
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. Но не уверен, почему это не сработало раньше.
Любой указатель будет высоко оценен.