3

我正在 JBoss 6 上部署 Java EE 6 JAX-RS Web 服务,我想使用Woodstox而不是当前使用的任何 SAX/StAX 解析器。由于某些堆栈跟踪列出了(在其他包中)中的类:

  • org.apache.xerces.parsers
  • org.apache.xerces.impl
  • org.apache.xerces.jaxp

...我猜它正在使用Xerces

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

我已经阅读过这个问题,但我认为我已经尝试过如上所述的“将其添加到您的类路径”选项。我也已经尝试根据此线程添加以下 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?

4

1 回答 1

0

EclipseLink JAXB (MOXy)创建一个 XMLStreamReader 时,它使用标准 API 来执行此操作,因此它应该获得适合您环境的那个:

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

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

于 2011-05-06T20:20:51.497 回答