Apache Axis 1.4 поддерживает HTTP 1.0 по умолчанию. Вызываемый сервер использует HTTP 1.1, который, очевидно, поддерживает Chunked Transfer Encoding.
С w3.org :
Кодировка чанков изменяет тело сообщения, чтобы передать его как серию чанков, каждый со своим собственным индикатором размера, за которым следует ДОПОЛНИТЕЛЬНЫЙ трейлер, содержащий поля заголовка объекта. Это позволяет передавать динамически создаваемый контент вместе с информацией, необходимой получателю для проверки того, что он получил полное сообщение.
Это означает, что Axis 1.4 ничего не знает о чанках в HTTP-ответе и, вероятно, закрывает соединение до получения всех чанков. Когда он пытается десериализовать сообщение SOAP, он жалуется на то, что XML не правильно сформирован и отсутствует какой-либо закрывающий тег, что ожидается, поскольку у него нет полного ответа SOAP.
Решение состоит в том, чтобы настроить Axis для использования CommonsHTTPSender, который по умолчанию поддерживает HTTP 1.1. Вы делаете это, добавляя client-config.wsdd в ваш classpath в org / apache / axis / client / client-config.wsdd со следующим содержимым:
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="ApacheCommonsHTTPConfig" xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="disablePrettyXML" value="true"/>
<parameter name="enableNamespacePrefixOptimization" value="false"/>
</globalConfiguration>
<transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender" />
<transport name="local" pivot="java:org.apache.axis.transport.local.LocalSender" />
<transport name="java" pivot="java:org.apache.axis.transport.java.JavaSender" />
</deployment>
Соответствующей настройкой является транспорт с именем «http».
У большинства серверов приложений этот класс уже загружен в их путь к классам, в случае, если вам не нужно добавлять Apache Commons HTTP jar в ваш путь к классам.