45
45
import org .springframework .http .client .AbstractClientHttpRequestFactoryWrapper ;
46
46
import org .springframework .http .client .ClientHttpRequestFactory ;
47
47
import org .springframework .http .client .HttpComponentsClientHttpRequestFactory ;
48
+ import org .springframework .http .client .JdkClientHttpRequestFactory ;
48
49
import org .springframework .http .client .OkHttp3ClientHttpRequestFactory ;
49
50
import org .springframework .http .client .SimpleClientHttpRequestFactory ;
50
51
import org .springframework .util .Assert ;
@@ -70,6 +71,10 @@ public final class ClientHttpRequestFactories {
70
71
71
72
private static final boolean OKHTTP_CLIENT_PRESENT = ClassUtils .isPresent (OKHTTP_CLIENT_CLASS , null );
72
73
74
+ static final String JDK_CLIENT_CLASS = "java.net.http.HttpClient" ;
75
+
76
+ private static final boolean JDK_CLIENT_PRESENT = ClassUtils .isPresent (JDK_CLIENT_CLASS , null );
77
+
73
78
private ClientHttpRequestFactories () {
74
79
}
75
80
@@ -87,6 +92,9 @@ public static ClientHttpRequestFactory get(ClientHttpRequestFactorySettings sett
87
92
if (OKHTTP_CLIENT_PRESENT ) {
88
93
return OkHttp .get (settings );
89
94
}
95
+ if (JDK_CLIENT_PRESENT ) {
96
+ return Jdk .get (settings );
97
+ }
90
98
return Simple .get (settings );
91
99
}
92
100
@@ -111,6 +119,9 @@ public static <T extends ClientHttpRequestFactory> T get(Class<T> requestFactory
111
119
if (requestFactoryType == OkHttp3ClientHttpRequestFactory .class ) {
112
120
return (T ) OkHttp .get (settings );
113
121
}
122
+ if (requestFactoryType == JdkClientHttpRequestFactory .class ) {
123
+ return (T ) Jdk .get (settings );
124
+ }
114
125
if (requestFactoryType == SimpleClientHttpRequestFactory .class ) {
115
126
return (T ) Simple .get (settings );
116
127
}
@@ -210,6 +221,33 @@ private static OkHttp3ClientHttpRequestFactory createRequestFactory(SslBundle ss
210
221
211
222
}
212
223
224
+ /**
225
+ * Support for {@link JdkClientHttpRequestFactory}.
226
+ */
227
+ static class Jdk {
228
+
229
+ static JdkClientHttpRequestFactory get (ClientHttpRequestFactorySettings settings ) {
230
+ java .net .http .HttpClient httpClient = createHttpClient (settings .connectTimeout (), settings .sslBundle ());
231
+ JdkClientHttpRequestFactory requestFactory = new JdkClientHttpRequestFactory (httpClient );
232
+ PropertyMapper map = PropertyMapper .get ().alwaysApplyingWhenNonNull ();
233
+ map .from (settings ::readTimeout ).asInt (Duration ::toMillis ).to (requestFactory ::setReadTimeout );
234
+ return requestFactory ;
235
+ }
236
+
237
+ private static java .net .http .HttpClient createHttpClient (Duration connectTimeout , SslBundle sslBundle ) {
238
+ java .net .http .HttpClient .Builder builder = java .net .http .HttpClient .newBuilder ();
239
+ if (connectTimeout != null ) {
240
+ builder .connectTimeout (connectTimeout );
241
+ }
242
+ if (sslBundle != null ) {
243
+ builder .sslContext (sslBundle .createSslContext ());
244
+ }
245
+ return builder .build ();
246
+ }
247
+
248
+
249
+ }
250
+
213
251
/**
214
252
* Support for {@link SimpleClientHttpRequestFactory}.
215
253
*/
0 commit comments