gpt4 book ai didi

java - 引入 axis2 后 webservice 客户端出现 NullPointerException

转载 作者:行者123 更新时间:2023-11-29 08:49:26 24 4
gpt4 key购买 nike

我们的 Web 服务客户端出现了一些问题。我们使用的 axis 实现从 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)

如果我们从类路径中完全删除 axis 1.4(这在发布版本中可能是不可能的,因为我们有太多依赖它的 jar)并且只使用 axis2,也会发生同样的情况。所以这似乎是 axis2 的问题。我尝试用谷歌搜索任何内容,但找不到符合我们问题的解决方案。关于这里出了什么问题有什么想法吗?

最佳答案

由于我对网络服务还很陌生,这里有几个教训:

  1. 虽然 axis 1.4 在我们的类路径中,但它不会自动使用,因为没有 Provider 实现。我们一直在使用 JAX-WS RI,甚至没有注意到。我刚刚通过使用 wireshark 检查请求发现了这一点。

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

  3. 切勿混淆不同的 Web 服务提供商,因为它总是会导致严重的头痛。与贵公司的所有其他部门沟通,并在一切失控之前尽快完成。

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

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

关于java - 引入 axis2 后 webservice 客户端出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com