繁体   English   中英

引入axis2之后,Web服务客户端中的NullPointerException

[英]NullPointerException in webservice client after introduction of axis2

我们的Web服务客户端遇到了一些麻烦。 我们使用的轴实现从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的问题。 我尝试用Google搜索任何内容,但找不到与我们的问题匹配的解决方案。 对这里出什么问题有任何想法吗?

由于我对Web服务还很陌生,因此这里有一些经验教训:

  1. 尽管轴1.4在我们的类路径中,但是由于没有提供者实现,因此不会自动使用它。 我们一直都在使用JAX-WS RI,甚至没有注意到。 我只是通过用Wireshark检查请求发现了这一点。

  2. 我们为最初的解决方案创建的SOAPHandlers负责NPE。 我开始调试整个过程,并注意到我们的一个处理程序使用了context.getMessage()。getSOAPHeader() ,虽然使用默认实现时它返回了SOAPHeader,但它使用axis2返回了null。 另一个是我们为多个附件添加的解决方法(请参阅https://java.net/jira/browse/WSIT-1320 ),该解决方法也失败了,因为MTOM现在可以正常工作了。 让我感到奇怪的是,如果处理程序中存在错误,则框架会构建SOAP错误消息,其中包含刚刚发生的事件的异常类型(而不是实际的堆栈跟踪),然后照常进行。 它返回此消息并继续进行消息解析,就像消息是对请求的答复一样。 从开发人员的角度来看,堆栈跟踪看起来是在服务器端抛出了错误,或者是由于某些框架的滥用,但事实是,处理程序中出现了问题,并引发了异常。 这花了相当长的时间才能找出答案,但这并不是我所期望的。

  3. 切勿混淆不同的Web服务提供商,因为它总是会给您带来极大的麻烦。 与公司中的所有其他部门进行沟通,并在一切变得不正常之前尽快执行此操作。

我们现在面临的最大问题是,我们有一个开源项目,该项目提供了由我们维护的Web服务客户端。 该项目使用Java的jax-ws ri实现,因此不依赖于任何WS实现。 目前,它已在不同的环境中使用,例如JBoss和内部专有服务器环境。 到目前为止,还没有问题,尽管JBoss使用CXF并且我们具有上述默认实现,因此它们似乎是兼容的。 随着axis2的引入,一切都出现了问题,因为axis2-jaxws.jar包含一个服务加载程序条目,该条目首先被评估,但是很遗憾,系统属性javax.xml.ws.spi.Provider不能覆盖该服务加载程序条目。 我尝试删除此jar,但它会导致其他错误,并且我几乎没有想法可以立即解决问题。

我将线程保持打开状态,但现在我几乎没有希望通过当前设置修复此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM