Как настроить 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).