spring-ws 已弃用 DefaultHttpClient

spring-ws deprecated DefaultHttpClient

我发现 spring-ws-core 3.4.0.RELEASE 中的 HttpComponentsMessageSender 默认构造函数依赖于 httpclient 4.5.6,正在实例化一个已弃用的 DefaultHttpClient()。但是,当我尝试设置自定义 Httpclient 时:

HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(HttpClientBuilder.create().build());

httpComponentsMessageSender.setReadTimeout(1000l);

我得到了:

Caused by: java.lang.UnsupportedOperationException: null
    at org.apache.http.impl.client.InternalHttpClient.getParams(InternalHttpClient.java:211) ~[httpclient-4.5.6.jar:4.5.6]
    at org.springframework.ws.transport.http.HttpComponentsMessageSender.setReadTimeout(HttpComponentsMessageSender.java:149) ~[spring-ws-core-3.0.4.RELEASE.jar:na]

spring 默认使用已弃用的 class 是否正确? 我应该如何设置我的自定义 HttpClient 实例? 似乎如果我设置自己的 HttpClient,我将无法通过 HttpCompoemntsMessageSender 配置它。

谢谢,

不确定您是否能够解决此问题,但这是以下问题的解决方案:

Caused by: java.lang.UnsupportedOperationException: null
    at org.apache.http.impl.client.InternalHttpClient.getParams(InternalHttpClient.java:211) ~[httpclient-4.5.6.jar:4.5.6]
    at org.springframework.ws.transport.http.HttpComponentsMessageSender.setReadTimeout(HttpComponentsMessageSender.java:149) ~[spring-ws-core-3.0.4.RELEASE.jar:na]

请注意,HttpComponentsMessageSender.setReadTimeout() 通过配置 HttpClient 参数来配置底层 HttpClient 的 readTimeout。

正如您在上面提供的那样,您可以使用 HttpClientBuilder 来执行此操作:

HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(HttpClientBuilder.create().build());

解决方法是在HttpClientBuilder

上设置"DefaultRequestConfig"
HttpClientBuilder.create()
                .setDefaultRequestConfig(requestConfig)
                .build();

如下所示,您可以通过定义 RequestConfig 在 HttpClient 级别设置这些配置选项。下面是一个例子:

 RequestConfig requestConfig = RequestConfig.custom()
                .setConnectionRequestTimeout(60 * 1000)
                .setConnectTimeout(60 * 1000)
                .setSocketTimeout(60 * 1000)
                .build();

希望这对您有所帮助。