我正在尝试连接并使用Web服务方法。我收到以下错误:
The SOAP action specified on the message, '', does not match the HTTP SOAP Action, 'http://tempuri.org/xpto/foobar'.
实际上,代码说明了这一点:
_state.getMessageContext().setProperty("http.soap.action", "http://yadayadayada");
但它并未说明该消息。
WSDL指出:
<wsdl:input wsaw:Action="http://tempuri.org/foo/bar" message="tns:xpto"/>
最佳答案
这个问题已经解决。我不得不更改WSDL2Java自动生成的代码。
在Stub类中,自动生成的代码如下所示;
(...)
org.apache.axis.client.Call _call = createCall();
_call.setOperation(_operations[11]);
_call.setUseSOAPAction(true);
_call.setSOAPActionURI("http://tempuri.org/foo/bar");
_call.setEncodingStyle(null);
_call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);
_call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);
_call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP12_CONSTANTS);
_call.setOperationName(new javax.xml.namespace.QName("http://tempuri.org/", "bar"));
setRequestHeaders(_call);
setAttachments(_call);
我必须在setRequestHeaders之前添加以下内容:
setHeader("http://www.w3.org/2005/08/addressing", "To", "http://WSDL.URL");
setHeader("http://www.w3.org/2005/08/addressing", "Action", "http://tempuri.org/foo/bar");
SOAPHeaderElement[] headers = getHeaders();
for (SOAPHeaderElement h : headers) { h.setRole(null); }
setRequestHeaders(_call);
setAttachments(_call);
关于java - 使用Web服务时的ActionMismatch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3823012/