Skip to content

Commit e1158ad

Browse files
committed
Merge pull request #23493
2 parents 0a7fdb3 + aa220a9 commit e1158ad

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@
2525

2626
import org.springframework.http.HttpHeaders;
2727
import org.springframework.http.client.reactive.ClientHttpConnector;
28+
import org.springframework.http.client.reactive.JettyClientHttpConnector;
2829
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
2930
import org.springframework.lang.Nullable;
3031
import org.springframework.util.Assert;
32+
import org.springframework.util.ClassUtils;
3133
import org.springframework.util.CollectionUtils;
3234
import org.springframework.util.LinkedMultiValueMap;
3335
import org.springframework.util.MultiValueMap;
@@ -42,6 +44,17 @@
4244
*/
4345
final class DefaultWebClientBuilder implements WebClient.Builder {
4446

47+
private static final boolean reactorClientPresent;
48+
49+
private static final boolean jettyClientPresent;
50+
51+
static {
52+
ClassLoader loader = DefaultWebClientBuilder.class.getClassLoader();
53+
reactorClientPresent = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", loader);
54+
jettyClientPresent = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader);
55+
}
56+
57+
4558
@Nullable
4659
private String baseUrl;
4760

@@ -215,7 +228,9 @@ public WebClient.Builder clone() {
215228

216229
@Override
217230
public WebClient build() {
218-
ExchangeFunction exchange = initExchangeFunction();
231+
ExchangeFunction exchange = (this.exchangeFunction == null ?
232+
ExchangeFunctions.create(getOrInitConnector(), this.exchangeStrategies) :
233+
this.exchangeFunction);
219234
ExchangeFunction filteredExchange = (this.filters != null ? this.filters.stream()
220235
.reduce(ExchangeFilterFunction::andThen)
221236
.map(filter -> filter.apply(exchange))
@@ -226,16 +241,17 @@ public WebClient build() {
226241
this.defaultRequest, new DefaultWebClientBuilder(this));
227242
}
228243

229-
private ExchangeFunction initExchangeFunction() {
230-
if (this.exchangeFunction != null) {
231-
return this.exchangeFunction;
244+
private ClientHttpConnector getOrInitConnector() {
245+
if (this.connector != null) {
246+
return this.connector;
232247
}
233-
else if (this.connector != null) {
234-
return ExchangeFunctions.create(this.connector, this.exchangeStrategies);
248+
else if (reactorClientPresent) {
249+
return new ReactorClientHttpConnector();
235250
}
236-
else {
237-
return ExchangeFunctions.create(new ReactorClientHttpConnector(), this.exchangeStrategies);
251+
else if (jettyClientPresent) {
252+
return new JettyClientHttpConnector();
238253
}
254+
throw new IllegalStateException("No suitable default ClientHttpConnector found");
239255
}
240256

241257
private UriBuilderFactory initUriBuilderFactory() {

0 commit comments

Comments
 (0)