diff --git a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpComponents5Connection.java b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpComponents5Connection.java index 11c1baf4..12066705 100644 --- a/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpComponents5Connection.java +++ b/spring-ws-core/src/main/java/org/springframework/ws/transport/http/HttpComponents5Connection.java @@ -27,10 +27,7 @@ import java.util.Iterator; import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.client5.http.classic.methods.HttpPost; -import org.apache.hc.core5.http.ClassicHttpResponse; -import org.apache.hc.core5.http.HttpEntity; -import org.apache.hc.core5.http.HttpResponse; -import org.apache.hc.core5.http.NameValuePair; +import org.apache.hc.core5.http.*; import org.apache.hc.core5.http.io.entity.ByteArrayEntity; import org.apache.hc.core5.http.io.entity.EntityUtils; import org.apache.hc.core5.http.protocol.HttpContext; @@ -119,8 +116,8 @@ public class HttpComponents5Connection extends AbstractHttpSenderConnection { @Override protected void onSendAfterWrite(WebServiceMessage message) throws IOException { - - httpPost.setEntity(new ByteArrayEntity(requestBuffer.toByteArray(), null)); + var contentType = ContentType.parse(httpPost.getFirstHeader(HttpHeaders.CONTENT_TYPE).getValue()); + httpPost.setEntity(new ByteArrayEntity(requestBuffer.toByteArray(), contentType)); requestBuffer = null; if (httpContext != null) { diff --git a/spring-ws-core/src/test/java/org/springframework/ws/transport/http/HttpComponents5MessageSenderIntegrationTest.java b/spring-ws-core/src/test/java/org/springframework/ws/transport/http/HttpComponents5MessageSenderIntegrationTest.java index e34d3b85..3179b998 100644 --- a/spring-ws-core/src/test/java/org/springframework/ws/transport/http/HttpComponents5MessageSenderIntegrationTest.java +++ b/spring-ws-core/src/test/java/org/springframework/ws/transport/http/HttpComponents5MessageSenderIntegrationTest.java @@ -16,21 +16,14 @@ package org.springframework.ws.transport.http; -import static org.assertj.core.api.AssertionsForClassTypes.*; -import static org.springframework.ws.transport.http.HttpComponents5ClientFactory.*; - import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import jakarta.xml.soap.MessageFactory; - -import java.io.IOException; -import java.net.URI; -import java.util.HashMap; -import java.util.Map; - import org.apache.hc.client5.http.HttpRoute; +import org.apache.hc.client5.http.classic.ExecChainHandler; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient; +import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; import org.apache.hc.core5.http.HttpHost; import org.eclipse.jetty.server.Connector; @@ -45,12 +38,33 @@ import org.springframework.ws.soap.saaj.SaajSoapMessageFactory; import org.springframework.ws.transport.WebServiceConnection; import org.springframework.ws.transport.support.FreePortScanner; +import java.io.IOException; +import java.net.URI; +import java.util.HashMap; +import java.util.Map; + +import static org.assertj.core.api.AssertionsForClassTypes.assertThat; +import static org.springframework.ws.transport.http.HttpComponents5ClientFactory.getPort; + class HttpComponents5MessageSenderIntegrationTest extends AbstractHttpWebServiceMessageSenderIntegrationTestCase { + private static CloseableHttpClient createHttpClientWithAssertion() { + ExecChainHandler handler = (request, scope, chain) -> { + assertThat(request.getEntity().getContentType()) + .describedAs("Exec interceptors are supposed to receive content type. Verify that HttpEntity class is instantiated correctly") + .isNotBlank(); + return chain.proceed(request, scope); + }; + return HttpClientBuilder.create() + .addRequestInterceptorFirst(new HttpComponents5MessageSender.RemoveSoapHeadersInterceptor()) + .addExecInterceptorFirst("logbook-alike exec interceptor", handler) + .build(); + } + @Override protected HttpComponents5MessageSender createMessageSender() { - return new HttpComponents5MessageSender(); + return new HttpComponents5MessageSender(createHttpClientWithAssertion()); } @Test // GH-1164