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>

成功せずに...

私は別の解決策も知っています:)

私を助けてくれてthx。

4

1 に答える 1

2

プロパティは、<env-entry>システム プロパティとしてではなく、JNDI を介してアクセスできるため、機能しません。Java VM を起動するときに、コマンド ラインでシステム プロパティを指定する必要があります。

どうやってトムキャットを起動しますか? コマンド ラインからの場合は、次のスニペットを JAVA_OPTS に追加してみてください。

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

export JAVA_OPTS='-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory'これは、環境変数 (Unix: 、Windows: SET JAVA_OPTS='-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactory') として、または Tomcat 起動スクリプト自体 (catalina.sh/catalina.bat) で実行できるはずです。

Eclipse から Tomcat を起動する場合は、[Debug Configurations] | [Debug Configurations] からパラメーターを追加できます。JRE | VM 引数。貼るだけ-Djavax.xml.stream.XMLInputFactory=com.ctc.wstx.stax.WstxInputFactoryでOKです。

コメントに基づいて編集:私の知る限り、web.xml でシステム プロパティを指定することはできません。申し訳ありません。

アイデア:システム プロパティをプログラムで設定できます。Tapestry アプリケーション モジュールに System.setProperty() への呼び出しを追加することもできます。JAXB が初期化される前に実行する必要があります。

于 2010-05-10T08:32:41.983 に答える