2010-05-10 52 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