5

サードパーティの SOAP Web サービスに接続しようとしています。HTTP SOAPActionヘッダーが空の文字列 ("")の場合にサービスが動作するようです。これは、wsdl のスニペットです。

<wsdl:binding name="detailsRequestMessage" type="tns:UssdPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="details">
        <soap:operation soapAction=""/>
        <wsdl:input>
            <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output>
            <soap:body use="literal"/>
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

soapAction=""が表示される場所

Axis2 (1.5) wsdl2java を使用してスタブを生成しました。

私は次の結果を得ることを望んでいました( SoapUIで実行した場合の成功した出力):

POST /details HTTP/1.1
Accept-Encoding: gzip,deflate
Content-Type: text/xml;charset=UTF-8
SOAPAction: ""
User-Agent: Jakarta Commons-HttpClient/3.1
Host: some.host
Content-Length: 323

しかし、代わりに私は得ています:

POST /details HTTP/1.1
Content-Type: text/xml; charset=UTF-8
SOAPAction: "http://some.url/wsussd/ussdtypes/UssdPortType/detailsRequest"
User-Agent: Axis2
Host: some.host
Content-Length: 300

何が問題なのか、またはプログラムでsoapActionをどのように設定すればよいのか、誰にも分かりますか?

ありがとう、ローネン

4

2 に答える 2

4

rperez の答えは完全には明らかではありませんでした。問題が 1.6.0 で修正されたと主張するhttps://issues.apache.org/jira/browse/AXIS2-4264を見つけましたが、1.6.2 でもまだ問題があります。

ただし、これは機能します。

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.Constants.Configuration.DISABLE_SOAP_ACTION, true);
于 2013-04-12T16:37:19.460 に答える
1

この質問への回答を見てください...生成されたスタブで同様のコードを見つけることができるかもしれません。

その場合は、アクションを設定できると思います(APIに従って):

serviceClient = new RPCServiceClient();
Options options = serviceClient.getOptions();
options.setAction("");

SOAPのバージョンによってアクションの扱いが違うと思います。別のバージョンを指定するには:

options.setSoapVersionURI(
    org.apache.axiom.soap.SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);

(または定数の SOAP12 バージョン)。

それが役立つことを願っています。

于 2009-10-06T16:08:25.660 に答える