Как настроить JAXB для использования Woodstox на JBoss 6?

Я развертываю веб-сервис Java EE 6 JAX-RS на JBoss 6, и я хотел бы использовать Woodstox вместо того, какой парсер SAX/StAX используется в настоящее время. Так как некоторые стеки отслеживают список классов в (среди других пакетов):

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

... Я предполагаю, что он использует Xerces.

Я попытался добавить необходимые файлы JAR (woodstox-core-asl-4.1.1.jar а также stax2-api-3.1.1.jar) в EAR (развернут в /lib каталог), а также в ВОЙНЕ (в WEB-INF/lib) но это, похоже, ни на что не повлияло, поскольку трассировка стека от исключений при синтаксическом анализе XML по-прежнему ссылается на пакеты Xerces.

Я уже читал этот вопрос, но думаю, что уже пробовал опцию "добавить его в свой путь к классу", как описано выше. Я также уже пытался добавить следующие аргументы VM согласно этой теме:

-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 ответ

Когда EclipseLink JAXB (MOXy) создает XMLStreamReader, он делает это, используя стандартные API, поэтому он должен получить тот, который соответствует вашей среде:

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

С учетом вышесказанного предполагается, что реализация JBoss JAX-RS вызывает путь кода MOXy, который позволяет ему создавать собственный XMLStreamReader (например, демаршалинг InputStream), а не передавать ему фактический XMLStreamReader (по выбору JBoss).

Другие вопросы по тегам