Проблема Axis2 в настройке HTTP-заголовка SOAPAction - PullRequest
5 голосов
/ 06 октября 2009

Я пытаюсь подключиться к стороннему веб-сервису SOAP. Кажется, что служба может работать, когда заголовок 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 в программе.

Спасибо, Ронен

Ответы [ 2 ]

4 голосов
/ 12 апреля 2013

Рперез не совсем ясно со своим ответом. Я нашел https://issues.apache.org/jira/browse/AXIS2-4264, который утверждает, что проблема была исправлена ​​в 1.6.0, но у меня все еще есть проблемы в 1.6.2

Однако, это работает:

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.Constants.Configuration.DISABLE_SOAP_ACTION, true);
1 голос
/ 06 октября 2009

Посмотрите на ответ на этот вопрос ... вы можете найти похожий код в сгенерированных заглушках.

Если это так, то я думаю, что вы можете установить действие (в соответствии с API ):

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

Я думаю, что действие обрабатывается по-разному в зависимости от версии SOAP. Чтобы указать другую версию:

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

(или версия константы SOAP12).

Надеюсь, это поможет.

...