I implemented a custom CloseableHttpClient like below:
private WebServiceMessageSender createWebServiceMessageSender() {
HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender();
RequestConfig config = RequestConfig.custom()
.setSocketTimeout(30_000)
.setConnectTimeout(30_000)
.setConnectionRequestTimeout(30_000)
.build();
SocketConfig socketConfig = SocketConfig.custom()
.setSoTimeout(4000)
.build();
CloseableHttpClient httpClient = HttpClientBuilder.create()
.addInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor())
.setDefaultRequestConfig(config)
.setDefaultSocketConfig(socketConfig)
.disableAutomaticRetries()
.build();
httpComponentsMessageSender.setHttpClient(httpClient);
return httpComponentsMessageSender;
}
and I injected this method to WebServiceTemplate as setMessageSender.
The problem is receiving the connection timeout (not the read timeout!) after 10 seconds, not as I configured above (4000 milliseconds). I have no idea why this webservice does not execute the timeout at the specified time, but waits 10 seconds. Has anyone had a similar problem?
Dependencies:
Spring-Boot: 2.7.x
spring-ws-core: 3.1.3
httpclient: 4.5.13
I`m calling google.com on port 81