Как заставить Axis2 использовать HTTP 1.0 для вызова веб-службы? - PullRequest
2 голосов
/ 27 января 2012

У меня проблемы с доступом к веб-сервису, предоставленному третьей стороной.Глядя на трассировку проводов Axis2, я вижу \ r \ n3ff8 \ r \ n в середине моего возвращения XML-тегов, что вызывает у Axis2 шипение, когда он пытается их проанализировать.

Насколько я могу судить, это как-то связано с порцией HTTP 1.1, которую Axis2 не очень хорошо обрабатывает.

Проблема, с которой я столкнулся, идентична проблеме в это сообщение на форуме

Как я могу изменить код моего веб-сервиса, чтобы он использовал HTTP 1.0, чтобы избежать проблемы с частями?Насколько я могу судить, Axis по умолчанию использует CommonsHTTPSender, так что я не уверен, почему в сообщении на форуме, указанном выше, предлагается изменить это.

Или есть лучший способ решить эту проблему?

Ответы [ 2 ]

2 голосов
/ 31 января 2012

Вы можете напрямую отключить разбиение на блоки:

stub._getServiceClient().getOptions().setProperty(HTTPConstants.CHUNKED, false);

Вы также можете управлять обеими этими вещами через файл конфигурации axis2.xml, если хотите.Найдите следующий раздел:

<transportSender name="http"
    class="org.apache.axis2.transport.http.CommonsHTTPTransportSender">
    <parameter name="PROTOCOL">HTTP/1.1</parameter>
    <parameter name="Transfer-Encoding">chunked</parameter>
</transportSender>

Вы можете изменить параметр PROTOCOL на «HTTP / 1.0» или удалить параметр Transfer-Encoding, чтобы отключить разбиение на блоки.

0 голосов
/ 27 января 2012

Узнайте, как это сделать, получите объект-заглушку, который вы будете использовать для вызова службы, и добавьте после него следующий код:

stub._getServiceClient().getOptions().setProperty(org.apache.axis2.transport.http.HTTPConstants.HTTP_PROTOCOL_VERSION,
                org.apache.axis2.transport.http.HTTPConstants.HEADER_PROTOCOL_10);
...