Axis2 WebService客户端:给定的SOAPAction与操作不匹配 [英] Axis2 WebService Client: The given SOAPAction does not match an operation
本文介绍了Axis2 WebService客户端:给定的SOAPAction与操作不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个在计算机上运行的使用CXF开发的测试Web服务,并且我一直在尝试使用Apache Axis2的"wsdl2java"功能作为客户端.我已经生成了代码,但是出现以下错误:
I have a test webservice developed with CXF running in my computer and I have been trying to make the client side with the "wsdl2java" function of Apache Axis2. I have already generated the code but I have the following error:
org.apache.axis2.AxisFault: The given SOAPAction http://service.taller1.webservices.spring.com/HolaMundoService/saludaHola does not match an operation.
at org.apache.axis2.util.Utils.getInboundFaultFromMessageContext(Utils.java:531)
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 com.spring.webservices.taller1.service.impl.HolaMundoServiceImplServiceStub.saludaHola(HolaMundoServiceImplServiceStub.java:182)
at mian.Main.main(Main.java:27)
这里是wsdl:
<?xml version='1.0' encoding='UTF-8'?><wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="http://impl.service.taller1.webservices.spring.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:ns2="http://schemas.xmlsoap.org/soap/http" xmlns:ns1="http://service.taller1.webservices.spring.com/" name="HolaMundoServiceImplService" targetNamespace="http://impl.service.taller1.webservices.spring.com/">
<wsdl:import location="http://localhost:8080/webservice-cfx-spring-0.0.1-SNAPSHOT/HolaMundoService?wsdl=HolaMundoService.wsdl" namespace="http://service.taller1.webservices.spring.com/">
</wsdl:import>
<wsdl:binding name="HolaMundoServiceImplServiceSoapBinding" type="ns1:HolaMundoService">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="saludaHola">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="saludaHola">
<soap:body use="literal"/>
</wsdl:input>
<wsdl:output name="saludaHolaResponse">
<soap:body use="literal"/>
</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HolaMundoServiceImplService">
<wsdl:port binding="tns:HolaMundoServiceImplServiceSoapBinding" name="HolaMundoServiceImplPort">
<soap:address location="http://localhost:8080/webservice-cfx-spring-0.0.1-SNAPSHOT/HolaMundoService"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
我将不胜感激.预先感谢您的帮助!
I would appreciate any help. Thanks in advance for your help!
推荐答案
您可能使用了错误的操作或错误的模式绑定.
you're probably using the wrong action or the wrong schema binding.
以下内容可能对您有用:
The following may work for you:
ServiceClient client = new ServiceClient();
OperationClient operationClient = client.createClient(ServiceClient.ANON_OUT_IN_OP);
// creating message context
MessageContext outMsgCtx = new MessageContext();
// assigning message context’s option object into instance variable
Options opts = outMsgCtx.getOptions();
// setting properties into option
opts.setTo(new EndpointReference("http://localhost:8080/webservice-cfx-spring-0.0.1-SNAPSHOT/HolaMundoService"));
opts.setAction(""); //your soap action is null
HttpTransportProperties.Authenticator auth = new HttpTransportProperties.Authenticator();
auth.setUsername("user");
auth.setPassword("pass");
opts.setProperty(org.apache.axis2.transport.http.HTTPConstants.AUTHENTICATE, auth);
//Create the Soap Factory
SOAPFactory fac = OMAbstractFactory.getSOAP11Factory();
//Create the request envelope
SOAPEnvelope envelope = fac.getDefaultEnvelope();
OMNamespace globalNs = fac.createOMNamespace("http://service.taller1.webservices.spring.com/", "ns1");
// creating the payload
OMElement method = fac.createOMElement("saludaHola", globalNs);
method.setText("Hello");
envelope.getBody().addChild(method);
outMsgCtx.setEnvelope(envelope);
operationClient.addMessageContext(outMsgCtx);
operationClient.execute(true);
MessageContext inMsgtCtx = operationClient.getMessageContext("In");
//get the response
SOAPEnvelope response = inMsgtCtx.getEnvelope();
System.out.println(response);
这篇关于Axis2 WebService客户端:给定的SOAPAction与操作不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文