我们的网络服务客户端遇到了一些问题。我们使用的轴实现从1.3版升级到1.4版,同时将axis2模块引入到类路径中。如果您现在尝试使用客户端发送请求,则会发生以下错误:
Caused by: javax.xml.ws.soap.SOAPFaultException: java.lang.NullPointerException
at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.createSystemException(MethodMarshallerUtils.java:1326)
at org.apache.axis2.jaxws.marshaller.impl.alt.MethodMarshallerUtils.demarshalFaultResponse(MethodMarshallerUtils.java:1052)
at org.apache.axis2.jaxws.marshaller.impl.alt.DocLitBareMethodMarshaller.demarshalFaultResponse(DocLitBareMethodMarshaller.java:415)
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.getFaultResponse(JAXWSProxyHandler.java:577)
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.createResponse(JAXWSProxyHandler.java:520)
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invokeSEIMethod(JAXWSProxyHandler.java:386)
at org.apache.axis2.jaxws.client.proxy.JAXWSProxyHandler.invoke(JAXWSProxyHandler.java:171)
at com.sun.proxy.$Proxy19.documentRepositoryProvideAndRegisterDocumentSetB(Unknown Source)
如果我们从类路径中完全删除轴1.4(在发布版本中可能无法实现,因为我们根据它有太多的jar)并且仅使用axis2,同样的情况也会发生。所以这似乎是axis2的一个问题。我试图谷歌任何东西,但找不到符合我们问题的解决方案。关于这里出了什么问题的任何想法?
答案 0 :(得分:0)
由于我对网络服务还很陌生,所以有几个经验教训:
虽然轴1.4在我们的类路径中,但它不会自动使用,因为没有Provider实现。我们一直使用JAX-WS RI,甚至没有注意到。我刚刚通过wireshark检查请求找到了这个。
我们为初始解决方案创建的SOAPHandlers负责NPE。我开始调试整个事情,并注意到我们的一个处理程序使用 context.getMessage()。getSOAPHeader(),尽管在使用默认实现时返回了SOAPHeader,但它仍返回带有轴2的null。另一个是我们为多个附件添加的变通方法(请参阅https://java.net/jira/browse/WSIT-1320),这也是因为MTOM现在正常工作而失败。让我想知道的是,如果处理程序中存在错误,框架会构建一个SOAP错误消息,其中包含异常类型(但不是实际的堆栈跟踪),然后继续正常运行。它返回此消息并继续解析消息,就像消息作为请求的答案一样。从开发人员的角度来看,堆栈跟踪看起来像是在服务器端抛出了错误,或者是由于某些框架滥用,但事实是在处理程序中出现了问题并且它引发了异常。这花了很长时间才发现,并不是我所期望的。
永远不要混淆不同的网络服务提供商,因为它总会以严重的麻烦结束。与您公司的所有其他部门进行沟通,并在一切失控之前尽快完成。
我们现在面临的一个大问题是,我们有一个开源项目,提供由我们维护的Web服务客户端。该项目与任何WS实现都没有依赖关系,因为它使用Java的jax-ws ri实现。它现在在不同的环境中使用,例如JBoss和内部专有服务器环境。直到现在都没有问题,虽然JBoss使用CXF并且我们有提到的默认实现,所以它们似乎是兼容的。随着axis2的引入,一切都出错了,因为axis2-jaxws.jar有一个服务加载器条目,它首先被评估,但遗憾的是它不会被系统属性javax.xml.ws.spi.Provider覆盖。我尝试删除这个jar但它会导致其他错误,我现在已经没有想法我们现在能够如何解决问题了。
我会让线程保持打开状态但是现在我几乎没有希望通过当前的设置来解决这个问题。