Skip to content

Commit 1191282

Browse files
committed
Merge pull request #36118 from poutsma
* gh-36118: Polish "Support JDK HttpClient in ClientHttpRequestFactories" Support JDK HttpClient in ClientHttpRequestFactories Closes gh-36118
2 parents 46aeeab + bb2c4cc commit 1191282

File tree

4 files changed

+41
-3
lines changed

4 files changed

+41
-3
lines changed

spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactories.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
import org.springframework.http.client.AbstractClientHttpRequestFactoryWrapper;
5050
import org.springframework.http.client.ClientHttpRequestFactory;
5151
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
52+
import org.springframework.http.client.JdkClientHttpRequestFactory;
5253
import org.springframework.http.client.JettyClientHttpRequestFactory;
5354
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
5455
import org.springframework.http.client.SimpleClientHttpRequestFactory;
@@ -126,6 +127,9 @@ public static <T extends ClientHttpRequestFactory> T get(Class<T> requestFactory
126127
if (requestFactoryType == JettyClientHttpRequestFactory.class) {
127128
return (T) Jetty.get(settings);
128129
}
130+
if (requestFactoryType == JdkClientHttpRequestFactory.class) {
131+
return (T) Jdk.get(settings);
132+
}
129133
if (requestFactoryType == SimpleClientHttpRequestFactory.class) {
130134
return (T) Simple.get(settings);
131135
}
@@ -254,6 +258,32 @@ private static JettyClientHttpRequestFactory createRequestFactory(SslBundle sslB
254258

255259
}
256260

261+
/**
262+
* Support for {@link JdkClientHttpRequestFactory}.
263+
*/
264+
static class Jdk {
265+
266+
static JdkClientHttpRequestFactory get(ClientHttpRequestFactorySettings settings) {
267+
java.net.http.HttpClient httpClient = createHttpClient(settings.connectTimeout(), settings.sslBundle());
268+
JdkClientHttpRequestFactory requestFactory = new JdkClientHttpRequestFactory(httpClient);
269+
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
270+
map.from(settings::readTimeout).asInt(Duration::toMillis).to(requestFactory::setReadTimeout);
271+
return requestFactory;
272+
}
273+
274+
private static java.net.http.HttpClient createHttpClient(Duration connectTimeout, SslBundle sslBundle) {
275+
java.net.http.HttpClient.Builder builder = java.net.http.HttpClient.newBuilder();
276+
if (connectTimeout != null) {
277+
builder.connectTimeout(connectTimeout);
278+
}
279+
if (sslBundle != null) {
280+
builder.sslContext(sslBundle.createSslContext());
281+
}
282+
return builder.build();
283+
}
284+
285+
}
286+
257287
/**
258288
* Support for {@link SimpleClientHttpRequestFactory}.
259289
*/

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesSimpleTests.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2022 the original author or authors.
2+
* Copyright 2012-2023 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -26,7 +26,7 @@
2626
*
2727
* @author Andy Wilkinson
2828
*/
29-
@ClassPathExclusions({ "httpclient5-*.jar", "okhttp-*.jar", "jetty-client-*.jar" })
29+
@ClassPathExclusions({ "httpclient5-*.jar", "jetty-client-*.jar", "okhttp-*.jar" })
3030
class ClientHttpRequestFactoriesSimpleTests
3131
extends AbstractClientHttpRequestFactoriesTests<SimpleClientHttpRequestFactory> {
3232

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesTests.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
import org.springframework.http.client.ClientHttpRequest;
2828
import org.springframework.http.client.ClientHttpRequestFactory;
2929
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
30+
import org.springframework.http.client.JdkClientHttpRequestFactory;
3031
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
3132
import org.springframework.http.client.SimpleClientHttpRequestFactory;
3233

@@ -75,6 +76,13 @@ void getOfOkHttpFactoryReturnsOkHttpFactory() {
7576
assertThat(requestFactory).isInstanceOf(OkHttp3ClientHttpRequestFactory.class);
7677
}
7778

79+
@Test
80+
void getOfJdkFactoryReturnsJdkFactory() {
81+
ClientHttpRequestFactory requestFactory = ClientHttpRequestFactories.get(JdkClientHttpRequestFactory.class,
82+
ClientHttpRequestFactorySettings.DEFAULTS);
83+
assertThat(requestFactory).isInstanceOf(JdkClientHttpRequestFactory.class);
84+
}
85+
7886
@Test
7987
void getOfUnknownTypeCreatesFactory() {
8088
ClientHttpRequestFactory requestFactory = ClientHttpRequestFactories.get(TestClientHttpRequestFactory.class,

spring-boot-project/spring-boot/src/test/java/org/springframework/boot/webservices/client/HttpWebServiceMessageSenderBuilderSimpleIntegrationTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
*
3535
* @author Stephane Nicoll
3636
*/
37-
@ClassPathExclusions(files = { "httpclient5-*.jar", "jetty-client-*.jar", "okhttp*.jar" })
37+
@ClassPathExclusions({ "httpclient5-*.jar", "jetty-client-*.jar", "okhttp*.jar" })
3838
class HttpWebServiceMessageSenderBuilderSimpleIntegrationTests {
3939

4040
private final HttpWebServiceMessageSenderBuilder builder = new HttpWebServiceMessageSenderBuilder();

0 commit comments

Comments
 (0)