我有以下代码:
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = inputFactory.createXMLStreamReader(inStream);
this.encoding = xmlStreamReader.getEncoding();
...
这个代码在JBoss和Websphere中运行良好,但是在特定的JBoss中抛出以下异常:
java.lang.ClassCastException: com.ctc.wstx.stax.WstxInputFactory cannot be cast to javax.xml.stream.XMLInputFactory
at javax.xml.stream.XMLInputFactory.newInstance(XMLInputFactory.java:136)
at es.gema.core.shared.dim.data.XFacturaE.detectVersion(XFacturaE.java:115)
at es.gema.core.shared.dim.data.XFacturaE.<init>(XFacturaE.java:67)
at es.gema.core.shared.dim.bc.InvoiceLoader.readXMLInvoice(InvoiceLoader.java:544)
at es.gema.core.shared.dim.bc.InvoiceLoader.loadInvoiceFACE(InvoiceLoader.java:137)
at es.gema.core.expenses.fac.bc.InvoiceServicesBC.execute(InvoiceServicesBC.java:127)
at es.gema.core.expenses.fac.bc.InvoiceServicesBC.execute(InvoiceServicesBC.java:92)
检查WstxInputFactory我看到它扩展了XMLInputFactory2而不是XMLInputFactory。
在这种情况下推荐的方法是什么?在不使用工厂的情况下创建WstxInputFactory的实例,或者配置Java容器以返回扩展XMLInputFactory的解析器?
答案 0 :(得分:5)
public abstract class XMLInputFactory2
extends javax.xml.stream.XMLInputFactory
因此com.ctc.wstx.stax.WstxInputFactory
扩展javax.xml.stream.XMLInputFactory
,因此必须可以转发给它。
但是,由于您获得此异常,因此您必须遇到类加载器问题。确保同一个类加载器加载javax.xml.stream.XMLInputFactory
。可能JBoss / JDK提供了一个,你的应用程序在类路径中也有一个StAX。但很难确切地告诉谁有罪。
答案 1 :(得分:2)
<强>问题:强> 我得到了以下错误。我的服务器是“jboss-eap-5.1.1”,JDK 1.6。
java.lang.ClassCastException:com.ctc.wstx.stax.WstxOutputFactory无法强制转换为javax.xml.stream.XMLOutputFactory
<强>解决方案:强> 我已经删除了“stax”库,确切地说:
<exclusions>
<exclusion>
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
</exclusions>
答案 2 :(得分:0)
将stax-api排除在外的解决方案在使用Microsoft文档的Java Apache POI API 时效果很好。
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
<exclusions>
<exclusion>
<groupId>stax</groupId>
<artifactId>stax-api</artifactId>
</exclusion>
</exclusions>
</dependency>