我试图从GAE连接到SOAP服务器。见example。 它在开发服务器上正常工作,但在生产过程中,初始化过程中出现500错误。大量挖掘后,我设法赶上的Throwable和记录堆栈跟踪:App Engine上的javax.xml.ws.Service初始化错误
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。有一个建议说:
我的意思是,你不应该把任何jar文件 执行jaxws本身进入你的战争。 App Engine运行时 包含jaxws的实现,您应该使用该实现。
在我的类路径中,我发现
- XML的API-1.0.b2,=。罐子
- 的JAXB api.jar中
- JAXB - impl.jar中
他们看起来不像jaxws的实现,至少据我了解。如果没有jaxb,我真的无法做到(如果我删除那个jar,我会得到一个错误)。
任何建议是值得欢迎的。
[更新] [看起来] 3只是在类路径中有jaxb导致问题,所以GAE的jaxws实现无法找到。
This answer对了解jaxws初始化如何工作也很有用。