使用Web服务时ActionMismatch

时间:2010-09-29 15:16:56

标签: java web-services

我正在尝试连接并使用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"/>

1 个答案:

答案 0 :(得分:1)

这个问题已经解决了。我不得不改变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);