我正在尝试从 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)
此问题可能与问题 4910有关。那里的一个建议说:
我上面的意思是你不应该将任何实现 jaxws 的 jar 文件放入你的战争中。App Engine 运行时包含 jaxws 的实现,您应该使用它。
在我的类路径中我发现
- xml-apis-1.0.b2,=.jar
- jaxb-api.jar
- jaxb-impl.jar
它们看起来不像 jaxws 实现,至少据我所知。真的不能没有 jaxb(如果我删除那个 jar,我会得到一个错误)。
欢迎任何建议。
[更新] [似乎] 3仅在类路径中包含 jaxb 会导致问题,因此无法找到 GAE 的 jaxws 实现。
这个答案对于了解 jaxws 初始化的工作方式也很有用。