我用axis2插件调用web服务。使用的方法是rpc。
代码主要是:
GetPayIDBillIDStub stub = new GetPayIDBillIDStub("http://80.91.4.113:8088/services/GetPayIDBillID_Proxy");
stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.CHUNKED, Boolean.FALSE);
GetPayIDBillIDStub.PaymentInput input = new GetPayIDBillIDStub.PaymentInput();
input.setPassword("123456");
input.setTelephone(2111111111);
input.setUsername("test");
paymentTelOPR.setPaymentTelOPRRequest(input);
org.apache.axiom.om.OMFactory factory = org.apache.axiom.om.OMAbstractFactory.getOMFactory();
paymentTelOPRResponseE = stub.paymentTelOPR(paymentTelOPRE.setPaymentTelOPRRequest(paymentTelOPR.getOMElement(GetPayIDBillIDStub.PaymentTelOPR.MY_QNAME, factory)));
错误是:
Exception in thread "main" java.lang.IllegalArgumentException: The MessageContext does not have an associated SOAPFault.
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:556)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:375)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:421)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:229)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:165)
at mypackage.GetPayIDBillIDStub.paymentTelOPR(GetPayIDBillIDStub.java:182)
at Run.main(Run.java:82)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)
帮助我。
答案 0 :(得分:0)
我们最近遇到了这个问题,因为响应不包含SOAPFault(实际上是服务调用的预期答案),但响应的http状态代码是5xx(在我们的例子中是500)。
在你的情况下也许类似的东西。
您可以使用SoapUI等通用Web服务客户端验证这一点,该客户端也可以显示原始hhtp响应。
答案 1 :(得分:0)
我知道这是一个迟到的答案,但我可以用我的经验帮助新工程师。 我在使用带有API的SOAP UI时遇到了同样的错误。当我通过故障响应替换我的模拟响应时,问题就开始了。但是,一旦我重新尝试使用正确的代码,它就没有用,它给了我这个错误。 解决方案是:我必须删除响应,因为它被视为故障响应并且错过了错误代码,当我创建新响应并删除旧响应时,它没有得到此异常