2010-05-10 49 views
1

我需要你的帮助来解决Tapestry和JaxB之间的冲突。 错误是: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> 

没有成功...

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

THX对我的帮助。

+0

-Djavax.xml.stream.XMLInputFactory = com.ctc.wstx.stax.WstxInputFactory在JVM参数中起作用。现在我需要将它集成到战争中,就像在web.xml中一样 – alex 2010-05-10 08:27:16

+0

您不能将系统属性置于WAR中,它们是JVM范围内的设置 – skaffman 2010-05-10 08:59:28

+0

看起来Tapestry开发人员认为将Tapestry与StAX API的具体实现(https://issues.apache.org/jira/browse/TAP5-745)。伟大的工作,家伙。 – skaffman 2010-05-10 09:13:58

回答

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,则可以通过调试配置| JRE | VM参数。只需粘贴-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory,你很好。

编辑根据评论: AFAIK,你不能在web.xml中指定系统属性,对不起。

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

+0

您是否认为有另一种方法可以解决冲突? – alex 2010-05-10 08:42:05

+0

只是想着这个解决方案,它的工作原理! Thx很多:) – alex 2010-05-10 08:58:13