barbitoff programmer`s blog

Здесь я публикую заметки из программерской жизни: грабли, на которые мне случилось наступить, проблемы, для которых было найдено элегантное (или не очень) решение, а также все, с чем мне пришлось столкнуться и чем хотелось бы поделиться =)
PS Если хотите меня поблагодарить - на странице есть 3 места, чтобы это сделать =)

вторник, 5 февраля 2013 г.

WSO2 ESB: ответ HTTP 411 Length Required от конечного сервиса

Проблема:

Некий сервис прокинут через WSO2 ESB. При вызове прокси-сервиса возвращается SOAP-Fault:
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
   <soapenv:Body>
      <soapenv:Fault>
         <soapenv:Code>
            <soapenv:Value>axis2ns4:</soapenv:Value>
         </soapenv:Code>
         <soapenv:Reason>
            <soapenv:Text xml:lang="en">Unexpected response received. HTTP response code : 411 HTTP status : Length Required exception : First Element must contain the local name, Envelope , but found html</soapenv:Text>
         </soapenv:Reason>
         <soapenv:Detail/>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>
, из чего следует, что конечный сервис ответил странным "411 Length Required", да ещё и с html в теле ответа. При вызове же конечного сервиса из soapUI приходит корректный ответ.

Причина:

HTTP-код 411 говорит о том, что сервис требует, чтобы при его вызове был установлен заголовок "Content-Length". Шина же использует Chunked transfer encoding, не устанавливая этого заголовка. К сожалению, отключить chunked-encoding можно только переключив шину на использование HTTP 1.0 установкой свойства:
<property name="FORCE_HTTP_1.0" value="true" scope="axis2"/>
перед отправкой запроса во входящей цепочке медиации.

Комментариев нет:

Отправить комментарий