我正面临着Woodstox STAX和java1.6StAX实现之间奇怪的运行时冲突。因为我使用的是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。但不确定为什么它以前没有失败。
任何指针都将受到高度赞赏。
发布于 2010-10-26 09:13:04
从表面上看,你有两种可能的选择:
然而,这里的具体错误有点不太可能。我主要推荐将其发布到cxf用户列表,并在那里确切地告诉我们您使用的是什么版本的CXF。
发布于 2011-01-14 03:14:30
看一下这个异常,它表明基本上不能将StartElement转换为EndElement;它看起来不像stax实现之间的不兼容,而是某个地方的错误。这是哪个Woodstox版本?
发布于 2015-06-24 02:11:25
XMLEvent.START_ELEMENT用例末尾的break不应该在这里丢失,否则它将继续到END_ELEMENT用例的第一个START_ELEMENT事件,然后是ClassCastException。
这部分代码已经从问题中省略了,所以我想我应该把它放在这里,以防这个简单的错误可能被忽略。这就是为什么当我意识到我需要休息的时候,我得到了同样的例外,让我走到了这里。)
https://stackoverflow.com/questions/4019969
复制相似问题