如何配置JAXB以在JBoss 6上使用Woodstox?

时间:2011-05-06 17:47:13

标签: java jaxb stax jboss6.x woodstox

我正在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 JARswoodstox-core-asl-4.1.1.jarstax2-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?

1 个答案:

答案 0 :(得分:0)

EclipseLink JAXB (MOXy)创建XMLStreamReader时,它使用标准API来实现,因此它应该适合您的环境:

xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(reader);

话虽如此,预先假定JBoss JAX-RS实现正在调用一个MOXy代码路径,允许它创建自己的XMLStreamReader(例如解组一个InputStream),而不是传递一个实际的XMLStreamReader(JBoss的选择) )。