【问题标题】:Tapestry + JaxB conflictTapestry + JaxB 冲突
【发布时间】:2011-02-17 13:42:05
【问题描述】:

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

没有成功...

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

谢谢你帮助我。

【问题讨论】:

  • JVM 参数中的 -Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory 有效。现在我需要将它集成到战争中,就像在 web.xml 中一样
  • 您不能将系统属性放在 WAR 中,它们是 JVM 范围的设置
  • 看起来 Tapestry 开发人员认为将 Tapestry 耦合到 StAX API (issues.apache.org/jira/browse/TAP5-745) 的特定实现是一个好主意。干得好,伙计们。

标签: tomcat jaxb conflict tapestry


【解决方案1】:

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

你如何启动你的tomcat?如果是从命令行,尝试将此 sn-p 添加到 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 初始化之前执行。

【讨论】:

  • 只要想一想这个解决方案,它就奏效了!谢谢很多:)
猜你喜欢
  • 2019-12-24
  • 2013-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-23
  • 1970-01-01
  • 2019-10-31
相关资源
最近更新 更多