Skip to content

Commit 5bdb0ec

Browse files
Improve HttpServiceClientAutoConfiguration conditions
See gh-18366 Co-authored-by: Phillip Webb <phil.webb@broadcom.com>
1 parent 2ae354d commit 5bdb0ec

File tree

5 files changed

+61
-12
lines changed

5 files changed

+61
-12
lines changed

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

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ private <T> T getProperty(Function<AbstractHttpRequestFactoryProperties, T> acce
7373
private <P, T> T getProperty(Function<AbstractHttpRequestFactoryProperties, P> accessor, Function<P, T> extractor,
7474
Predicate<T> predicate) {
7575
for (AbstractHttpRequestFactoryProperties properties : this.orderedProperties) {
76-
P value = accessor.apply(properties);
77-
T extracted = (value != null) ? extractor.apply(value) : null;
78-
if (predicate.test(extracted)) {
79-
return extracted;
76+
if (properties != null) {
77+
P value = accessor.apply(properties);
78+
T extracted = (value != null) ? extractor.apply(value) : null;
79+
if (predicate.test(extracted)) {
80+
return extracted;
81+
}
8082
}
8183
}
8284
return null;

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/reactive/ClientHttpConnectors.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,12 @@ private <T> T getProperty(Function<AbstractClientHttpConnectorProperties, T> acc
7373
private <P, T> T getProperty(Function<AbstractClientHttpConnectorProperties, P> accessor, Function<P, T> extractor,
7474
Predicate<T> predicate) {
7575
for (AbstractClientHttpConnectorProperties properties : this.orderedProperties) {
76-
P value = accessor.apply(properties);
77-
T extracted = (value != null) ? extractor.apply(value) : null;
78-
if (predicate.test(extracted)) {
79-
return extracted;
76+
if (properties != null) {
77+
P value = accessor.apply(properties);
78+
T extracted = (value != null) ? extractor.apply(value) : null;
79+
if (predicate.test(extracted)) {
80+
return extracted;
81+
}
8082
}
8183
}
8284
return null;

spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/http/client/service/HttpServiceClientAutoConfiguration.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.springframework.boot.ssl.SslBundles;
3131
import org.springframework.boot.web.client.RestClientCustomizer;
3232
import org.springframework.context.annotation.Bean;
33+
import org.springframework.context.annotation.Conditional;
3334
import org.springframework.web.client.support.RestClientAdapter;
3435
import org.springframework.web.service.registry.HttpServiceProxyRegistry;
3536
import org.springframework.web.service.registry.ImportHttpServices;
@@ -48,6 +49,7 @@
4849
@AutoConfiguration(after = { HttpClientAutoConfiguration.class, RestClientAutoConfiguration.class })
4950
@ConditionalOnClass(RestClientAdapter.class)
5051
@ConditionalOnBean(HttpServiceProxyRegistry.class)
52+
@Conditional(NotReactiveWebApplicationCondition.class)
5153
@EnableConfigurationProperties(HttpClientServiceProperties.class)
5254
public class HttpServiceClientAutoConfiguration implements BeanClassLoaderAware {
5355

@@ -63,12 +65,13 @@ public void setBeanClassLoader(ClassLoader classLoader) {
6365

6466
@Bean
6567
RestClientPropertiesHttpServiceGroupConfigurer restClientPropertiesHttpServiceGroupConfigurer(
66-
ObjectProvider<SslBundles> sslBundles, HttpClientProperties httpClientProperties,
68+
ObjectProvider<SslBundles> sslBundles, ObjectProvider<HttpClientProperties> httpClientProperties,
6769
HttpClientServiceProperties serviceProperties,
6870
ObjectProvider<ClientHttpRequestFactoryBuilder<?>> clientFactoryBuilder,
6971
ObjectProvider<ClientHttpRequestFactorySettings> clientHttpRequestFactorySettings) {
7072
return new RestClientPropertiesHttpServiceGroupConfigurer(this.beanClassLoader, sslBundles,
71-
httpClientProperties, serviceProperties, clientFactoryBuilder, clientHttpRequestFactorySettings);
73+
httpClientProperties.getIfAvailable(), serviceProperties, clientFactoryBuilder,
74+
clientHttpRequestFactorySettings);
7275
}
7376

7477
@Bean
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
* Copyright 2012-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package org.springframework.boot.autoconfigure.http.client.service;
18+
19+
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
20+
import org.springframework.boot.autoconfigure.condition.NoneNestedConditions;
21+
import org.springframework.boot.autoconfigure.condition.SpringBootCondition;
22+
23+
/**
24+
* {@link SpringBootCondition} that applies only when running in a non-reactive web
25+
* application.
26+
*
27+
* @author Phillip Webb
28+
*/
29+
class NotReactiveWebApplicationCondition extends NoneNestedConditions {
30+
31+
NotReactiveWebApplicationCondition() {
32+
super(ConfigurationPhase.PARSE_CONFIGURATION);
33+
}
34+
35+
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.REACTIVE)
36+
private static final class ReactiveWebApplication {
37+
38+
}
39+
40+
}

spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/http/client/reactive/service/ReactiveHttpServiceClientAutoConfigurationTests.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.springframework.aop.Advisor;
3030
import org.springframework.boot.autoconfigure.AutoConfigurations;
3131
import org.springframework.boot.autoconfigure.http.client.reactive.ClientHttpConnectorAutoConfiguration;
32+
import org.springframework.boot.autoconfigure.http.client.service.HttpServiceClientAutoConfiguration;
3233
import org.springframework.boot.autoconfigure.web.reactive.function.client.WebClientAutoConfiguration;
3334
import org.springframework.boot.http.client.HttpRedirects;
3435
import org.springframework.boot.http.client.reactive.ClientHttpConnectorBuilder;
@@ -58,8 +59,9 @@
5859
class ReactiveHttpServiceClientAutoConfigurationTests {
5960

6061
private final ReactiveWebApplicationContextRunner contextRunner = new ReactiveWebApplicationContextRunner()
61-
.withConfiguration(AutoConfigurations.of(ReactiveHttpServiceClientAutoConfiguration.class,
62-
ClientHttpConnectorAutoConfiguration.class, WebClientAutoConfiguration.class));
62+
.withConfiguration(AutoConfigurations.of(HttpServiceClientAutoConfiguration.class,
63+
ReactiveHttpServiceClientAutoConfiguration.class, ClientHttpConnectorAutoConfiguration.class,
64+
WebClientAutoConfiguration.class));
6365

6466
@Test
6567
void configuresClientFromProperties() {

0 commit comments

Comments
 (0)