2012-07-25 61 views
0

我试图从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的实现,您应该使用该实现。

在我的类路径中,我发现

  1. XML的API-1.0.b2,=。罐子
  2. 的JAXB api.jar中
  3. JAXB - impl.jar中

他们看起来不像jaxws的实现,至少据我了解。如果没有jaxb,我真的无法做到(如果我删除那个jar,我会得到一个错误)。

任何建议是值得欢迎的。

[更新] [看起来] 3只是在类路径中有jaxb导致问题,所以GAE的jaxws实现无法找到。

This answer对了解jaxws初始化如何工作也很有用。

回答

0

经过大量的挖掘,我放弃了GAE的jaxws实现。 工厂classloader,期间找不到它们的实现。

所以我选择了Force.com Web Services Connecto r并设法使它工作。 在代码生成过程中,生成的代码中存在一些错误,并且GAE连接器也需要一些修补程序。

我很想在GitHub上创建一个项目来展示我所做的。 这个实现更快,你也可以设置套接字超时!