java - Woodstox stax 和 java stax 冲突

标签 java stax woodstox

我面临着 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 的一部分。但不知道为什么它之前没有失败。

任何指针都将受到高度赞赏。

最佳答案

好吧,从表面上看你有两种可能的选择:

  1. 使用依赖项排除来关闭 Woodstox。 CXF 与内置 StaX 一起工作——在内置 Stax 中产生或消除各种错误。

  2. 自己使用 Woodstox。

但是,这里的具体错误有点不太可能。我主要建议将其发布到 CXF 用户列表,并告诉我们您正在使用的 CXF 版本。

关于java - Woodstox stax 和 java stax 冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4019969/

相关文章:

java - 使用 Woodstox 解析 XML 时保持实体不变

java - 使用java api更改mp3文件的标题属性

java - 如何使用 Java 正确迭代 xml?

java - 如何仅获取具有值 Stax 的元素

java - 系统架构

Java 8 计算两个日期之间的月份

java - 通过 APACHE TOMCAT 通过 Windows 中托管的 JSP 从其他计算机运行 Linux VM 中托管的 jsp 页面

java - 如何将单个文件从 CVS 导入到项目中

java - 在java中将XML文件转换为CSV