Как указывает igor.zh, эта проблема может возникать при использовании класса Spring HttpComponentsMessageSender. Точнее, это проблема, только если вы передаете свой собственный экземпляр HttpClient в конструктор HttpComponentsMessageSender - в противном случае проблема обрабатывается автоматически.
Начиная с spring-ws 2.1.4, подкласс HttpComponentsMessageSender.RemoveSoapHeadersInterceptor, который используется в конструкторе по умолчанию, был открыт для решения этой проблемы (см. https://jira.spring.io/browse/SWS-835) и поэтому может использоваться вместо этого в ваших собственных экземплярах HttpClient написания собственного класса для этого. Он также очищает заголовок HTTP.TRANSFER_ENCODING.
Используйте метод HttpClientBuilder.addInterceptorFirst, чтобы внедрить этот перехватчик в ваш собственный экземпляр HttpClient. Пример ниже с использованием проводки XML bean. Если кто-нибудь знает более краткий способ создания экземпляра HttpClient (кроме написания класса фабричного компонента), я весь в ушах!
<bean id="httpClientBuilder" class="org.apache.http.impl.client.HttpClientBuilder" factory-method="create"/>
<bean id="interceptedHttpClientBuilder" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" ref="httpClientBuilder" />
<property name="targetMethod" value="addInterceptorFirst"> </property>
<property name="arguments">
<list>
<bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender.RemoveSoapHeadersInterceptor"/>
</list>
</property>
</bean>
<bean id="httpClient" factory-bean="interceptedHttpClientBuilder" factory-method="build" />
<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
<constructor-arg ref="messageFactory"/>
<property name="messageSender">
<bean class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
<property name="httpClient" ref="httpClient"/>
</bean>
</property>
</bean>
В качестве альтернативы, если вы можете, просто разрешите HttpComponentsMessageSender создать свой собственный экземпляр HttpClient, а не передавать его ему. Небольшое замечание по этому поводу: начиная с spring-ws 2.2.0-RELEASE, конструктор по умолчанию для HttpComponentsMessageSender продолжает использовать класс DefaultHttpClient, который теперь устарел. Надеюсь, это будет исправлено в следующем выпуске.