1

我需要你的帮助来解决 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>

没有成功...

我也知道另一种解决方案:)

谢谢你帮助我。

4

1 回答 1

2

这些<env-entry>属性可以通过 JNDI 访问,而不是作为系统属性访问,所以这不起作用。启动 Java VM 时,必须在命令行中指定系统属性。

你如何启动你的tomcat?如果它来自命令行,请尝试将此代码段添加到 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)中执行。

如果从 Eclipse 启动 Tomcat,可以通过 Debug Configurations | 添加参数 JRE | 虚拟机参数。只需粘贴-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory就可以了。

根据评论进行编辑: AFAIK,您不能在 web.xml 中指定系统属性,抱歉。

一个想法:您可以以编程方式设置系统属性。也许您可以在 Tapestry 应用程序模块中添加对 System.setProperty() 的调用。它必须在 JAXB 初始化之前执行。

于 2010-05-10T08:32:41.983 回答