Гобелен + конфликт JaxB - PullRequest
1 голос
/ 10 мая 2010

Мне нужна ваша помощь для разрешения конфликта между Tapestry и JaxB. Ошибка:

com.sun.xml.stream.ZephyrParserFactory не может быть приведен к org.codehaus.stax2.XMLInputFactory2

Я нахожу способ решить это, но это для пристани: http://tynamo.org/tapestry-resteasy+guide

Решение, похоже, заключается в добавлении системных свойств для объявления:

javax.xml.stream.XMLInputFactory = com.ctc.wstx.stax.WstxInputFactory

Но я не знаю, как это сделать для Tomcat. Я пытаюсь сделать это в web.xml как:

<env-entry>
     <env-entry-name>
      javax.xml.stream.XMLInputFactory
     </env-entry-name>
     <env-entry-value>
      com.ctc.wstx.stax.WstxInputFactory
     </env-entry-value>
     <env-entry-type>
      com.ctc.wstx.stax.WstxInputFactory
     </env-entry-type>
    </env-entry>

без успеха ...

Я также знаю о другом решении:)

Спасибо за помощь.

1 Ответ

2 голосов
/ 10 мая 2010

Свойства <env-entry> доступны через JNDI, а не как системные свойства, поэтому они не будут работать. Системные свойства должны быть указаны в командной строке при запуске Java VM.

Как вы начинаете свой кот? Если это из командной строки, попробуйте добавить этот фрагмент в JAVA_OPTS:

java -Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory [...]

Это можно сделать либо в виде переменной среды (Unix: export JAVA_OPTS='-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory', Windows: SET JAVA_OPTS='-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory'), либо в самом сценарии запуска Tomcat (catalina.sh/catalina.bat).

.

Если вы запускаете Tomcat из Eclipse, вы можете добавить параметр через Debug Configurations | JRE | В.М. Аргументы. Просто вставьте -Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory и все хорошо.

Редактирование на основе комментария: AFAIK, вы не можете указать системные свойства в web.xml, извините.

Идея: Вы можете установить системные свойства программно. Возможно, вы могли бы добавить вызов System.setProperty () в вашем модуле приложения Tapestry. Он должен быть выполнен до инициализации JAXB.

...