0

GAE から SOAP サーバーに接続しようとしています。を参照してください。開発サーバーではすべて正常に動作しますが、本番環境では初期化中に 500 エラーが発生します。いろいろ調べた結果、Throwable をキャッチしてスタック トレースをログに記録することができました。

java.lang.ExceptionInInitializerError
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
at java.lang.Class.newInstance0(Class.java:372)
at java.lang.Class.newInstance(Class.java:325)
at javax.xml.ws.spi.FactoryFinder.newInstance(FactoryFinder.java:58)
at javax.xml.ws.spi.FactoryFinder.find(FactoryFinder.java:142)
at javax.xml.ws.spi.Provider.provider(Provider.java:102)

この問題は、Issue 4910に関連している可能性があります。そこにある提案は次のように述べています。

上記の意味は、jaxws 自体を実装する jar ファイルを戦争に入れるべきではないということです。App Engine ランタイムには jaxws の実装が含まれており、それを使用する必要があります。

クラスパスで見つけた

  1. xml-apis-1.0.b2,=.jar
  2. jaxb-api.jar
  3. jaxb-impl.jar

少なくとも私が理解している限り、それらは jaxws の実装のようには見えません。jaxbなしでは本当にできません(そのjarを削除するとエラーが発生します)。

どんな提案でも大歓迎です。

[更新] [どうやら] 3クラスパスに jaxb があるだけで問題が発生し、GAE の jaxws 実装が見つからない。

この回答は、jaxws の初期化がどのように機能するかを理解するのにも役立ちます。

4

1 に答える 1

0

いろいろ調べた結果、GAE による jaxws の実装を断念しました。それらの実装は、Factory クラスローダによって検出されません。

そこで、Force.com Web Services Connectorを選択し、なんとか機能させました。コード生成プロセス、生成されたコードにバグがあり、GAE コネクタにも修正が必要でした。

私が行ったことを示すために、GitHub でプロジェクトを作成したくなります。この実装はより高速であり、ソケットのタイムアウトを設定することもできます!

于 2012-07-26T05:27:50.760 に答える