Skip to content

Commit de2b992

Browse files
committed
Add nullability annotations to module/spring-boot-http-client
See gh-46587
1 parent f9ebd0d commit de2b992

File tree

38 files changed

+245
-133
lines changed

38 files changed

+245
-133
lines changed

module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/AbstractClientHttpRequestFactoryBuilder.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,11 @@
2222
import java.util.List;
2323
import java.util.function.Consumer;
2424

25+
import org.jspecify.annotations.Nullable;
26+
2527
import org.springframework.boot.util.LambdaSafe;
2628
import org.springframework.http.client.ClientHttpRequestFactory;
29+
import org.springframework.lang.Contract;
2730
import org.springframework.util.Assert;
2831

2932
/**
@@ -37,7 +40,7 @@ abstract class AbstractClientHttpRequestFactoryBuilder<T extends ClientHttpReque
3740

3841
private final List<Consumer<T>> customizers;
3942

40-
protected AbstractClientHttpRequestFactoryBuilder(List<Consumer<T>> customizers) {
43+
protected AbstractClientHttpRequestFactoryBuilder(@Nullable List<Consumer<T>> customizers) {
4144
this.customizers = (customizers != null) ? customizers : Collections.emptyList();
4245
}
4346

@@ -64,7 +67,7 @@ private <E> List<E> merge(Collection<E> list, Collection<? extends E> additional
6467

6568
@Override
6669
@SuppressWarnings("unchecked")
67-
public final T build(ClientHttpRequestFactorySettings settings) {
70+
public final T build(@Nullable ClientHttpRequestFactorySettings settings) {
6871
T factory = createClientHttpRequestFactory(
6972
(settings != null) ? settings : ClientHttpRequestFactorySettings.defaults());
7073
LambdaSafe.callbacks(Consumer.class, this.customizers, factory).invoke((consumer) -> consumer.accept(factory));
@@ -73,7 +76,9 @@ public final T build(ClientHttpRequestFactorySettings settings) {
7376

7477
protected abstract T createClientHttpRequestFactory(ClientHttpRequestFactorySettings settings);
7578

76-
protected final HttpClientSettings asHttpClientSettings(ClientHttpRequestFactorySettings settings) {
79+
@Contract("!null -> !null")
80+
protected final @Nullable HttpClientSettings asHttpClientSettings(
81+
@Nullable ClientHttpRequestFactorySettings settings) {
7782
return (settings != null) ? new HttpClientSettings(settings.redirects(), settings.connectTimeout(),
7883
settings.readTimeout(), settings.sslBundle()) : null;
7984
}

module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/ClientHttpRequestFactoryBuilder.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
import java.util.function.Consumer;
2222
import java.util.function.Supplier;
2323

24+
import org.jspecify.annotations.Nullable;
25+
2426
import org.springframework.boot.util.LambdaSafe;
2527
import org.springframework.http.client.ClientHttpRequestFactory;
2628
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
@@ -59,7 +61,7 @@ default T build() {
5961
* @param settings the settings to apply or {@code null}
6062
* @return a fully configured {@link ClientHttpRequestFactory}.
6163
*/
62-
T build(ClientHttpRequestFactorySettings settings);
64+
T build(@Nullable ClientHttpRequestFactorySettings settings);
6365

6466
/**
6567
* Return a new {@link ClientHttpRequestFactoryBuilder} that applies the given
@@ -213,7 +215,8 @@ static ClientHttpRequestFactoryBuilder<? extends ClientHttpRequestFactory> detec
213215
* @return the most suitable {@link ClientHttpRequestFactoryBuilder} for the classpath
214216
* @since 3.5.0
215217
*/
216-
static ClientHttpRequestFactoryBuilder<? extends ClientHttpRequestFactory> detect(ClassLoader classLoader) {
218+
static ClientHttpRequestFactoryBuilder<? extends ClientHttpRequestFactory> detect(
219+
@Nullable ClassLoader classLoader) {
217220
if (HttpComponentsClientHttpRequestFactoryBuilder.Classes.present(classLoader)) {
218221
return httpComponents();
219222
}

module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/ClientHttpRequestFactoryRuntimeHints.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import java.lang.reflect.Method;
2121
import java.net.HttpURLConnection;
2222

23+
import org.jspecify.annotations.Nullable;
24+
2325
import org.springframework.aot.hint.ExecutableMode;
2426
import org.springframework.aot.hint.ReflectionHints;
2527
import org.springframework.aot.hint.RuntimeHints;
@@ -45,13 +47,13 @@
4547
class ClientHttpRequestFactoryRuntimeHints implements RuntimeHintsRegistrar {
4648

4749
@Override
48-
public void registerHints(RuntimeHints hints, ClassLoader classLoader) {
50+
public void registerHints(RuntimeHints hints, @Nullable ClassLoader classLoader) {
4951
if (ClassUtils.isPresent("org.springframework.http.client.ClientHttpRequestFactory", classLoader)) {
5052
registerHints(hints.reflection(), classLoader);
5153
}
5254
}
5355

54-
private void registerHints(ReflectionHints hints, ClassLoader classLoader) {
56+
private void registerHints(ReflectionHints hints, @Nullable ClassLoader classLoader) {
5557
hints.registerField(findField(AbstractClientHttpRequestFactoryWrapper.class, "requestFactory"));
5658
registerClientHttpRequestFactoryHints(hints, classLoader,
5759
HttpComponentsClientHttpRequestFactoryBuilder.Classes.HTTP_CLIENTS,
@@ -71,8 +73,8 @@ private void registerHints(ReflectionHints hints, ClassLoader classLoader) {
7173
});
7274
}
7375

74-
private void registerClientHttpRequestFactoryHints(ReflectionHints hints, ClassLoader classLoader, String className,
75-
Runnable action) {
76+
private void registerClientHttpRequestFactoryHints(ReflectionHints hints, @Nullable ClassLoader classLoader,
77+
String className, Runnable action) {
7678
hints.registerTypeIfPresent(classLoader, className, (typeHint) -> {
7779
typeHint.onReachableType(TypeReference.of(className));
7880
action.run();

module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/ClientHttpRequestFactorySettings.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.time.Duration;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.boot.ssl.SslBundle;
2224
import org.springframework.http.client.ClientHttpRequestFactory;
2325

@@ -35,14 +37,18 @@
3537
* @since 3.4.0
3638
* @see ClientHttpRequestFactoryBuilder
3739
*/
38-
public record ClientHttpRequestFactorySettings(HttpRedirects redirects, Duration connectTimeout, Duration readTimeout,
39-
SslBundle sslBundle) {
40+
public record ClientHttpRequestFactorySettings(HttpRedirects redirects, @Nullable Duration connectTimeout,
41+
@Nullable Duration readTimeout, @Nullable SslBundle sslBundle) {
4042

4143
private static final ClientHttpRequestFactorySettings defaults = new ClientHttpRequestFactorySettings(null, null,
4244
null, null);
4345

44-
public ClientHttpRequestFactorySettings {
45-
redirects = (redirects != null) ? redirects : HttpRedirects.FOLLOW_WHEN_POSSIBLE;
46+
public ClientHttpRequestFactorySettings(@Nullable HttpRedirects redirects, @Nullable Duration connectTimeout,
47+
@Nullable Duration readTimeout, @Nullable SslBundle sslBundle) {
48+
this.redirects = (redirects != null) ? redirects : HttpRedirects.FOLLOW_WHEN_POSSIBLE;
49+
this.connectTimeout = connectTimeout;
50+
this.readTimeout = readTimeout;
51+
this.sslBundle = sslBundle;
4652
}
4753

4854
/**
@@ -51,7 +57,7 @@ public record ClientHttpRequestFactorySettings(HttpRedirects redirects, Duration
5157
* @param connectTimeout the new connect timeout setting
5258
* @return a new {@link ClientHttpRequestFactorySettings} instance
5359
*/
54-
public ClientHttpRequestFactorySettings withConnectTimeout(Duration connectTimeout) {
60+
public ClientHttpRequestFactorySettings withConnectTimeout(@Nullable Duration connectTimeout) {
5561
return new ClientHttpRequestFactorySettings(this.redirects, connectTimeout, this.readTimeout, this.sslBundle);
5662
}
5763

@@ -61,7 +67,7 @@ public ClientHttpRequestFactorySettings withConnectTimeout(Duration connectTimeo
6167
* @param readTimeout the new read timeout setting
6268
* @return a new {@link ClientHttpRequestFactorySettings} instance
6369
*/
64-
public ClientHttpRequestFactorySettings withReadTimeout(Duration readTimeout) {
70+
public ClientHttpRequestFactorySettings withReadTimeout(@Nullable Duration readTimeout) {
6571
return new ClientHttpRequestFactorySettings(this.redirects, this.connectTimeout, readTimeout, this.sslBundle);
6672
}
6773

@@ -72,7 +78,8 @@ public ClientHttpRequestFactorySettings withReadTimeout(Duration readTimeout) {
7278
* @param readTimeout the new read timeout setting
7379
* @return a new {@link ClientHttpRequestFactorySettings} instance
7480
*/
75-
public ClientHttpRequestFactorySettings withTimeouts(Duration connectTimeout, Duration readTimeout) {
81+
public ClientHttpRequestFactorySettings withTimeouts(@Nullable Duration connectTimeout,
82+
@Nullable Duration readTimeout) {
7683
return new ClientHttpRequestFactorySettings(this.redirects, connectTimeout, readTimeout, this.sslBundle);
7784
}
7885

@@ -82,7 +89,7 @@ public ClientHttpRequestFactorySettings withTimeouts(Duration connectTimeout, Du
8289
* @param sslBundle the new SSL bundle setting
8390
* @return a new {@link ClientHttpRequestFactorySettings} instance
8491
*/
85-
public ClientHttpRequestFactorySettings withSslBundle(SslBundle sslBundle) {
92+
public ClientHttpRequestFactorySettings withSslBundle(@Nullable SslBundle sslBundle) {
8693
return new ClientHttpRequestFactorySettings(this.redirects, this.connectTimeout, this.readTimeout, sslBundle);
8794
}
8895

@@ -92,7 +99,7 @@ public ClientHttpRequestFactorySettings withSslBundle(SslBundle sslBundle) {
9299
* @param redirects the new redirects setting
93100
* @return a new {@link ClientHttpRequestFactorySettings} instance
94101
*/
95-
public ClientHttpRequestFactorySettings withRedirects(HttpRedirects redirects) {
102+
public ClientHttpRequestFactorySettings withRedirects(@Nullable HttpRedirects redirects) {
96103
return new ClientHttpRequestFactorySettings(redirects, this.connectTimeout, this.readTimeout, this.sslBundle);
97104
}
98105

@@ -102,7 +109,7 @@ public ClientHttpRequestFactorySettings withRedirects(HttpRedirects redirects) {
102109
* @param sslBundle the SSL bundle setting
103110
* @return a new {@link ClientHttpRequestFactorySettings} instance
104111
*/
105-
public static ClientHttpRequestFactorySettings ofSslBundle(SslBundle sslBundle) {
112+
public static ClientHttpRequestFactorySettings ofSslBundle(@Nullable SslBundle sslBundle) {
106113
return defaults().withSslBundle(sslBundle);
107114
}
108115

module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/HttpClientSettings.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818

1919
import java.time.Duration;
2020

21+
import org.jspecify.annotations.Nullable;
22+
2123
import org.springframework.boot.ssl.SslBundle;
2224

2325
/**
@@ -31,13 +33,17 @@
3133
* @author Phillip Webb
3234
* @since 3.5.0
3335
*/
34-
public record HttpClientSettings(HttpRedirects redirects, Duration connectTimeout, Duration readTimeout,
35-
SslBundle sslBundle) {
36+
public record HttpClientSettings(HttpRedirects redirects, @Nullable Duration connectTimeout,
37+
@Nullable Duration readTimeout, @Nullable SslBundle sslBundle) {
3638

3739
static final HttpClientSettings DEFAULTS = new HttpClientSettings(null, null, null, null);
3840

39-
public HttpClientSettings {
40-
redirects = (redirects != null) ? redirects : HttpRedirects.FOLLOW_WHEN_POSSIBLE;
41+
public HttpClientSettings(@Nullable HttpRedirects redirects, @Nullable Duration connectTimeout,
42+
@Nullable Duration readTimeout, @Nullable SslBundle sslBundle) {
43+
this.redirects = (redirects != null) ? redirects : HttpRedirects.FOLLOW_WHEN_POSSIBLE;
44+
this.connectTimeout = connectTimeout;
45+
this.readTimeout = readTimeout;
46+
this.sslBundle = sslBundle;
4147
}
4248

4349
}

module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/HttpComponentsClientHttpRequestFactoryBuilder.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
2929
import org.apache.hc.client5.http.ssl.TlsSocketStrategy;
3030
import org.apache.hc.core5.http.io.SocketConfig;
31+
import org.jspecify.annotations.Nullable;
3132

3233
import org.springframework.boot.context.properties.PropertyMapper;
3334
import org.springframework.boot.ssl.SslBundle;
@@ -53,7 +54,7 @@ public final class HttpComponentsClientHttpRequestFactoryBuilder
5354
}
5455

5556
private HttpComponentsClientHttpRequestFactoryBuilder(
56-
List<Consumer<HttpComponentsClientHttpRequestFactory>> customizers,
57+
@Nullable List<Consumer<HttpComponentsClientHttpRequestFactory>> customizers,
5758
HttpComponentsHttpClientBuilder httpClientBuilder) {
5859
super(customizers);
5960
this.httpClientBuilder = httpClientBuilder;
@@ -121,7 +122,7 @@ public HttpComponentsClientHttpRequestFactoryBuilder withSocketConfigCustomizer(
121122
* @return a new {@link HttpComponentsClientHttpRequestFactoryBuilder} instance
122123
*/
123124
public HttpComponentsClientHttpRequestFactoryBuilder withTlsSocketStrategyFactory(
124-
Function<SslBundle, TlsSocketStrategy> tlsSocketStrategyFactory) {
125+
Function<@Nullable SslBundle, @Nullable TlsSocketStrategy> tlsSocketStrategyFactory) {
125126
Assert.notNull(tlsSocketStrategyFactory, "'tlsSocketStrategyFactory' must not be null");
126127
return new HttpComponentsClientHttpRequestFactoryBuilder(getCustomizers(),
127128
this.httpClientBuilder.withTlsSocketStrategyFactory(tlsSocketStrategyFactory));
@@ -156,7 +157,7 @@ static class Classes {
156157

157158
static final String HTTP_CLIENTS = "org.apache.hc.client5.http.impl.classic.HttpClients";
158159

159-
static boolean present(ClassLoader classLoader) {
160+
static boolean present(@Nullable ClassLoader classLoader) {
160161
return ClassUtils.isPresent(HTTP_CLIENTS, classLoader);
161162
}
162163

module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/HttpComponentsHttpAsyncClientBuilder.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManager;
3030
import org.apache.hc.client5.http.impl.nio.PoolingAsyncClientConnectionManagerBuilder;
3131
import org.apache.hc.core5.http.nio.ssl.TlsStrategy;
32+
import org.jspecify.annotations.Nullable;
3233

3334
import org.springframework.boot.context.properties.PropertyMapper;
3435
import org.springframework.boot.ssl.SslBundle;
@@ -54,7 +55,7 @@ public final class HttpComponentsHttpAsyncClientBuilder {
5455

5556
private final Consumer<RequestConfig.Builder> defaultRequestConfigCustomizer;
5657

57-
private final Function<SslBundle, TlsStrategy> tlsStrategyFactory;
58+
private final Function<@Nullable SslBundle, @Nullable TlsStrategy> tlsStrategyFactory;
5859

5960
public HttpComponentsHttpAsyncClientBuilder() {
6061
this(Empty.consumer(), Empty.consumer(), Empty.consumer(), Empty.consumer(),
@@ -65,7 +66,7 @@ private HttpComponentsHttpAsyncClientBuilder(Consumer<HttpAsyncClientBuilder> cu
6566
Consumer<PoolingAsyncClientConnectionManagerBuilder> connectionManagerCustomizer,
6667
Consumer<ConnectionConfig.Builder> connectionConfigCustomizer,
6768
Consumer<RequestConfig.Builder> defaultRequestConfigCustomizer,
68-
Function<SslBundle, TlsStrategy> tlsStrategyFactory) {
69+
Function<@Nullable SslBundle, @Nullable TlsStrategy> tlsStrategyFactory) {
6970
this.customizer = customizer;
7071
this.connectionManagerCustomizer = connectionManagerCustomizer;
7172
this.connectionConfigCustomizer = connectionConfigCustomizer;
@@ -123,7 +124,7 @@ public HttpComponentsHttpAsyncClientBuilder withConnectionConfigCustomizer(
123124
* @return a new {@link HttpComponentsHttpAsyncClientBuilder} instance
124125
*/
125126
public HttpComponentsHttpAsyncClientBuilder withTlsStrategyFactory(
126-
Function<SslBundle, TlsStrategy> tlsStrategyFactory) {
127+
Function<@Nullable SslBundle, @Nullable TlsStrategy> tlsStrategyFactory) {
127128
Assert.notNull(tlsStrategyFactory, "'tlsStrategyFactory' must not be null");
128129
return new HttpComponentsHttpAsyncClientBuilder(this.customizer, this.connectionManagerCustomizer,
129130
this.connectionConfigCustomizer, this.defaultRequestConfigCustomizer, tlsStrategyFactory);
@@ -150,7 +151,7 @@ public HttpComponentsHttpAsyncClientBuilder withDefaultRequestConfigCustomizer(
150151
* @param settings the settings to apply
151152
* @return a new {@link CloseableHttpAsyncClient} instance
152153
*/
153-
public CloseableHttpAsyncClient build(HttpClientSettings settings) {
154+
public CloseableHttpAsyncClient build(@Nullable HttpClientSettings settings) {
154155
settings = (settings != null) ? settings : HttpClientSettings.DEFAULTS;
155156
HttpAsyncClientBuilder builder = HttpAsyncClientBuilder.create()
156157
.useSystemProperties()
@@ -166,11 +167,17 @@ private PoolingAsyncClientConnectionManager createConnectionManager(HttpClientSe
166167
.useSystemProperties();
167168
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
168169
builder.setDefaultConnectionConfig(createConnectionConfig(settings));
169-
map.from(settings::sslBundle).as(this.tlsStrategyFactory).to(builder::setTlsStrategy);
170+
setTlsStrategy(settings, map, builder);
170171
this.connectionManagerCustomizer.accept(builder);
171172
return builder.build();
172173
}
173174

175+
@SuppressWarnings("NullAway") // Lambda isn't detected with the correct nullability
176+
private void setTlsStrategy(HttpClientSettings settings, PropertyMapper map,
177+
PoolingAsyncClientConnectionManagerBuilder builder) {
178+
map.from(settings::sslBundle).as(this.tlsStrategyFactory).to(builder::setTlsStrategy);
179+
}
180+
174181
private ConnectionConfig createConnectionConfig(HttpClientSettings settings) {
175182
ConnectionConfig.Builder builder = ConnectionConfig.custom();
176183
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();

module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/HttpComponentsHttpClientBuilder.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
3030
import org.apache.hc.client5.http.ssl.TlsSocketStrategy;
3131
import org.apache.hc.core5.http.io.SocketConfig;
32+
import org.jspecify.annotations.Nullable;
3233

3334
import org.springframework.boot.context.properties.PropertyMapper;
3435
import org.springframework.boot.ssl.SslBundle;
@@ -54,7 +55,7 @@ public final class HttpComponentsHttpClientBuilder {
5455

5556
private final Consumer<RequestConfig.Builder> defaultRequestConfigCustomizer;
5657

57-
private final Function<SslBundle, TlsSocketStrategy> tlsSocketStrategyFactory;
58+
private final Function<@Nullable SslBundle, @Nullable TlsSocketStrategy> tlsSocketStrategyFactory;
5859

5960
public HttpComponentsHttpClientBuilder() {
6061
this(Empty.consumer(), Empty.consumer(), Empty.consumer(), Empty.consumer(),
@@ -65,7 +66,7 @@ private HttpComponentsHttpClientBuilder(Consumer<HttpClientBuilder> customizer,
6566
Consumer<PoolingHttpClientConnectionManagerBuilder> connectionManagerCustomizer,
6667
Consumer<SocketConfig.Builder> socketConfigCustomizer,
6768
Consumer<RequestConfig.Builder> defaultRequestConfigCustomizer,
68-
Function<SslBundle, TlsSocketStrategy> tlsSocketStrategyFactory) {
69+
Function<@Nullable SslBundle, @Nullable TlsSocketStrategy> tlsSocketStrategyFactory) {
6970
this.customizer = customizer;
7071
this.connectionManagerCustomizer = connectionManagerCustomizer;
7172
this.socketConfigCustomizer = socketConfigCustomizer;
@@ -125,7 +126,7 @@ public HttpComponentsHttpClientBuilder withSocketConfigCustomizer(
125126
* @return a new {@link HttpComponentsHttpClientBuilder} instance
126127
*/
127128
public HttpComponentsHttpClientBuilder withTlsSocketStrategyFactory(
128-
Function<SslBundle, TlsSocketStrategy> tlsSocketStrategyFactory) {
129+
Function<@Nullable SslBundle, @Nullable TlsSocketStrategy> tlsSocketStrategyFactory) {
129130
Assert.notNull(tlsSocketStrategyFactory, "'tlsSocketStrategyFactory' must not be null");
130131
return new HttpComponentsHttpClientBuilder(this.customizer, this.connectionManagerCustomizer,
131132
this.socketConfigCustomizer, this.defaultRequestConfigCustomizer, tlsSocketStrategyFactory);
@@ -153,7 +154,7 @@ public HttpComponentsHttpClientBuilder withDefaultRequestConfigCustomizer(
153154
* @param settings the settings to apply
154155
* @return a new {@link HttpClient} instance
155156
*/
156-
public CloseableHttpClient build(HttpClientSettings settings) {
157+
public CloseableHttpClient build(@Nullable HttpClientSettings settings) {
157158
settings = (settings != null) ? settings : HttpClientSettings.DEFAULTS;
158159
Assert.isTrue(settings.connectTimeout() == null, "'settings' must not have a 'connectTimeout'");
159160
HttpClientBuilder builder = HttpClientBuilder.create()
@@ -170,11 +171,17 @@ private PoolingHttpClientConnectionManager createConnectionManager(HttpClientSet
170171
.useSystemProperties();
171172
PropertyMapper map = PropertyMapper.get();
172173
builder.setDefaultSocketConfig(createSocketConfig(settings));
173-
map.from(settings::sslBundle).as(this.tlsSocketStrategyFactory).whenNonNull().to(builder::setTlsSocketStrategy);
174+
setTlsSocketStrategy(settings, map, builder);
174175
this.connectionManagerCustomizer.accept(builder);
175176
return builder.build();
176177
}
177178

179+
@SuppressWarnings("NullAway") // Lambda isn't detected with the correct nullability
180+
private void setTlsSocketStrategy(HttpClientSettings settings, PropertyMapper map,
181+
PoolingHttpClientConnectionManagerBuilder builder) {
182+
map.from(settings::sslBundle).as(this.tlsSocketStrategyFactory).whenNonNull().to(builder::setTlsSocketStrategy);
183+
}
184+
178185
private SocketConfig createSocketConfig(HttpClientSettings settings) {
179186
SocketConfig.Builder builder = SocketConfig.custom();
180187
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();

0 commit comments

Comments
 (0)