我正在JBoss 6上部署Java EE 6 JAX-RS Web服务,我想使用Woodstox而不是当前正在使用的SAX / StAX解析器。由于某些堆栈跟踪(在其他包中)列出了类:
org.apache.xerces.parsers
org.apache.xerces.impl
org.apache.xerces.jaxp
......我猜它正在使用Xerces。
我尝试将the necessary JARs(woodstox-core-asl-4.1.1.jar
和stax2-api-3.1.1.jar
)添加到EAR(部署在/lib
目录中)和WAR中(WEB-INF/lib
但是这似乎并没有影响任何东西,因为XML解析中的异常的堆栈跟踪仍然引用了Xerces包。
我已经阅读了this question,但我认为我已经尝试过“将其添加到您的类路径”选项,如上所述。我已经尝试按照this thread添加以下VM args:
-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory
-Djavax.xml.stream.XMLOutputFactory=com.ctc.wstx.stax.WstxOutputFactory
-Djavax.xml.stream.XMLEventFactory=com.ctc.wstx.stax.WstxEventFactory
-Dcom.sun.xml.ws.api.streaming.XMLStreamReaderFactory.woodstox=true
-Dcom.sun.xml.ws.api.streaming.XMLStreamWriterFactory.woodstox=true
我做错了什么?如何让JAXB使用Woodstox代替(我认为)Xerces?
答案 0 :(得分:0)
当EclipseLink JAXB (MOXy)创建XMLStreamReader时,它使用标准API来实现,因此它应该适合您的环境:
xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(reader);
话虽如此,预先假定JBoss JAX-RS实现正在调用一个MOXy代码路径,允许它创建自己的XMLStreamReader(例如解组一个InputStream),而不是传递一个实际的XMLStreamReader(JBoss的选择) )。