Add ReactiveResponseConsumer classpath check to http5 auto-configuration

Closes gh-34964
This commit is contained in:
Moritz Halbritter 2023-05-10 10:47:08 +02:00
parent 947ac8df73
commit ec4d52e381
3 changed files with 15 additions and 2 deletions

View File

@ -73,6 +73,7 @@ dependencies {
exclude group: "commons-logging", module: "commons-logging"
}
optional("org.apache.httpcomponents.client5:httpclient5")
optional("org.apache.httpcomponents.core5:httpcore5-reactive")
optional("org.apache.kafka:kafka-streams")
optional("org.apache.solr:solr-solrj") {
exclude group: "org.slf4j", module: "jcl-over-slf4j"
@ -275,4 +276,4 @@ tasks.named("checkSpringConfigurationMetadata").configure {
"spring.datasource.tomcat.*",
"spring.groovy.template.configuration.*"
]
}
}

View File

@ -18,6 +18,7 @@ package org.springframework.boot.autoconfigure.web.reactive.function.client;
import org.apache.hc.client5.http.impl.async.HttpAsyncClients;
import org.apache.hc.core5.http.nio.AsyncRequestProducer;
import org.apache.hc.core5.reactive.ReactiveResponseConsumer;
import org.eclipse.jetty.client.HttpClient;
import org.eclipse.jetty.util.ssl.SslContextFactory;
@ -87,7 +88,7 @@ class ClientHttpConnectorConfiguration {
}
@Configuration(proxyBeanMethods = false)
@ConditionalOnClass({ HttpAsyncClients.class, AsyncRequestProducer.class })
@ConditionalOnClass({ HttpAsyncClients.class, AsyncRequestProducer.class, ReactiveResponseConsumer.class })
@ConditionalOnMissingBean(ClientHttpConnector.class)
static class HttpClient5 {

View File

@ -24,8 +24,10 @@ import org.eclipse.jetty.util.thread.Scheduler;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.test.context.FilteredClassLoader;
import org.springframework.boot.test.context.runner.ReactiveWebApplicationContextRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.http.client.reactive.HttpComponentsClientHttpConnector;
import org.springframework.http.client.reactive.JettyClientHttpConnector;
import org.springframework.http.client.reactive.JettyResourceFactory;
import org.springframework.test.util.ReflectionTestUtils;
@ -38,6 +40,7 @@ import static org.mockito.Mockito.mock;
*
* @author Phillip Webb
* @author Brian Clozel
* @author Moritz Halbritter
*/
class ClientHttpConnectorConfigurationTests {
@ -83,6 +86,14 @@ class ClientHttpConnectorConfigurationTests {
});
}
@Test
void shouldNotConfigureReactiveHttpClient5WhenHttpCore5ReactiveJarIsMissing() {
new ReactiveWebApplicationContextRunner()
.withClassLoader(new FilteredClassLoader("org.apache.hc.core5.reactive"))
.withConfiguration(AutoConfigurations.of(ClientHttpConnectorConfiguration.HttpClient5.class))
.run((context) -> assertThat(context).doesNotHaveBean(HttpComponentsClientHttpConnector.class));
}
static class CustomHttpClientMapper {
static boolean called = false;