Java 如何配置JAXB在JBoss6上使用Woodstox?

Java 如何配置JAXB在JBoss6上使用Woodstox?,java,jaxb,stax,jboss6.x,woodstox,Java,Jaxb,Stax,Jboss6.x,Woodstox,我正在JBoss6上部署一个JavaEE6JAX-RSWeb服务,我想使用SAX/StAX解析器来代替当前使用的任何解析器。由于某些堆栈跟踪列出了(在其他包中)中的类: org.apache.xerces.parsers org.apache.xerces.impl org.apache.xerces.jaxp …我猜它正在使用 我尝试将(woodstox-core-asl-4.1.1.jar和stax2-api-3.1.1.jar)添加到EAR(部署在/lib目录)和WAR(在WEB-IN

我正在JBoss6上部署一个JavaEE6JAX-RSWeb服务,我想使用SAX/StAX解析器来代替当前使用的任何解析器。由于某些堆栈跟踪列出了(在其他包中)中的类:

  • org.apache.xerces.parsers
  • org.apache.xerces.impl
  • org.apache.xerces.jaxp
…我猜它正在使用

我尝试将(
woodstox-core-asl-4.1.1.jar
stax2-api-3.1.1.jar
)添加到EAR(部署在
/lib
目录)和WAR(在
WEB-INF/lib
目录)中,但这似乎没有影响任何事情,因为XML解析中异常的堆栈跟踪仍然引用Xerces包

我已经读过了,但我想我已经尝试过上面提到的“将其添加到类路径”选项。我还尝试按照添加以下VM参数:

我做错了什么?如何让JAXB使用Woodstox而不是(我认为)Xerces?

当创建XMLStreamReader时,它使用标准API,因此它应该得到适合您环境的API:

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

话虽如此,但前提是JBoss JAX-RS实现正在调用MOXy代码路径,该路径允许它创建自己的XMLStreamReader(例如解组InputStream),而不是将实际的XMLStreamReader(由JBoss选择)传递给它.

这实际上取决于最终在您的环境中使用的JAXB实现。您发布链接的那个线程提到,默认情况下,Oracle JDK附带的JAXB实现仅使用SAX解析XML,不会查看任何StAX设置。要使用StAX,您需要使用不同的JAXB实现,例如MOXy(在该线程中提到)。@laz:我已经在使用MOXy了。如果有区别,我使用的是Jersey而不是RESTeasy(JBoss默认的JAX-RS实现)。
xmlInputFactory = XMLInputFactory.newInstance();
XMLStreamReader xmlStreamReader = xmlInputFactory.createXMLStreamReader(reader);