Merge pull request #13364 from nosan:http-webservice-sender-duration-int

* pr/13364:
  Use Duration in HttpWebServiceMessageSenderBuilder
This commit is contained in:
Stephane Nicoll
2018-06-05 16:23:14 +02:00
4 changed files with 30 additions and 18 deletions

View File

@@ -17,6 +17,7 @@
package org.springframework.boot.webservices.client;
import java.lang.reflect.Method;
import java.time.Duration;
import java.util.function.Supplier;
import org.springframework.boot.web.client.ClientHttpRequestFactorySupplier;
@@ -35,28 +36,28 @@ import org.springframework.ws.transport.http.ClientHttpRequestMessageSender;
*/
public class HttpWebServiceMessageSenderBuilder {
private Integer connectTimeout;
private Duration connectTimeout;
private Integer readTimeout;
private Duration readTimeout;
private Supplier<ClientHttpRequestFactory> requestFactorySupplier;
/**
* Set the connection timeout in milliseconds.
* @param connectTimeout the connection timeout in milliseconds
* Set the connection timeout.
* @param connectTimeout the connection timeout
* @return a new builder instance
*/
public HttpWebServiceMessageSenderBuilder setConnectTimeout(int connectTimeout) {
public HttpWebServiceMessageSenderBuilder setConnectTimeout(Duration connectTimeout) {
this.connectTimeout = connectTimeout;
return this;
}
/**
* Set the read timeout in milliseconds.
* @param readTimeout the read timeout in milliseconds
* Set the read timeout.
* @param readTimeout the read timeout
* @return a new builder instance
*/
public HttpWebServiceMessageSenderBuilder setReadTimeout(int readTimeout) {
public HttpWebServiceMessageSenderBuilder setReadTimeout(Duration readTimeout) {
this.readTimeout = readTimeout;
return this;
}
@@ -95,17 +96,18 @@ public class HttpWebServiceMessageSenderBuilder {
*/
private static class TimeoutRequestFactoryCustomizer {
private final int timeout;
private final Duration timeout;
private final String methodName;
TimeoutRequestFactoryCustomizer(int timeout, String methodName) {
TimeoutRequestFactoryCustomizer(Duration timeout, String methodName) {
this.timeout = timeout;
this.methodName = methodName;
}
public void customize(ClientHttpRequestFactory factory) {
ReflectionUtils.invokeMethod(findMethod(factory), factory, this.timeout);
ReflectionUtils.invokeMethod(findMethod(factory), factory,
Math.toIntExact(this.timeout.toMillis()));
}
private Method findMethod(ClientHttpRequestFactory factory) {

View File

@@ -16,6 +16,8 @@
package org.springframework.boot.webservices.client;
import java.time.Duration;
import okhttp3.OkHttpClient;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -50,8 +52,9 @@ public class HttpWebServiceMessageSenderBuilderOkHttp3IntegrationTests {
@Test
public void buildWithCustomTimeouts() {
WebServiceMessageSender messageSender = this.builder.setConnectTimeout(5000)
.setReadTimeout(2000).build();
WebServiceMessageSender messageSender = this.builder
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(2)).build();
OkHttp3ClientHttpRequestFactory factory = assertOkHttp3RequestFactory(
messageSender);
OkHttpClient client = (OkHttpClient) ReflectionTestUtils.getField(factory,

View File

@@ -16,6 +16,8 @@
package org.springframework.boot.webservices.client;
import java.time.Duration;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -49,8 +51,9 @@ public class HttpWebServiceMessageSenderBuilderSimpleIntegrationTests {
@Test
public void buildWithCustomTimeouts() {
WebServiceMessageSender messageSender = this.builder.setConnectTimeout(5000)
.setReadTimeout(2000).build();
WebServiceMessageSender messageSender = this.builder
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(2)).build();
SimpleClientHttpRequestFactory requestFactory = assertSimpleClientRequestFactory(
messageSender);
assertThat(ReflectionTestUtils.getField(requestFactory, "connectTimeout"))

View File

@@ -16,6 +16,8 @@
package org.springframework.boot.webservices.client;
import java.time.Duration;
import org.apache.http.client.config.RequestConfig;
import org.junit.Test;
@@ -50,7 +52,8 @@ public class HttpWebServiceMessageSenderBuilderTests {
ClientHttpRequestMessageSender messageSender = build(
new HttpWebServiceMessageSenderBuilder()
.requestFactory(SimpleClientHttpRequestFactory::new)
.setConnectTimeout(5000).setReadTimeout(2000));
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(2)));
SimpleClientHttpRequestFactory requestFactory = (SimpleClientHttpRequestFactory) messageSender
.getRequestFactory();
assertThat(ReflectionTestUtils.getField(requestFactory, "connectTimeout"))
@@ -62,8 +65,9 @@ public class HttpWebServiceMessageSenderBuilderTests {
@Test
public void buildUsesHttpComponentsByDefault() {
ClientHttpRequestMessageSender messageSender = build(
new HttpWebServiceMessageSenderBuilder().setConnectTimeout(5000)
.setReadTimeout(2000));
new HttpWebServiceMessageSenderBuilder()
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(2)));
ClientHttpRequestFactory requestFactory = messageSender.getRequestFactory();
assertThat(requestFactory)
.isInstanceOf(HttpComponentsClientHttpRequestFactory.class);