From 8e5de1ecbacc88f6f7d845b7c74b2e2ef2ce1455 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Sat, 6 Jun 2020 19:14:19 +0200 Subject: [PATCH] Avoid unnecessary copy of cookies map in DefaultWebClientBuilder See gh-25034 --- .../client/DefaultWebClientBuilder.java | 28 ++++++++----------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java index 98733a3e7803..3b52090258b8 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/function/client/DefaultWebClientBuilder.java @@ -101,6 +101,7 @@ public DefaultWebClientBuilder(DefaultWebClientBuilder other) { this.defaultUriVariables = (other.defaultUriVariables != null ? new LinkedHashMap<>(other.defaultUriVariables) : null); this.uriBuilderFactory = other.uriBuilderFactory; + if (other.defaultHeaders != null) { this.defaultHeaders = new HttpHeaders(); this.defaultHeaders.putAll(other.defaultHeaders); @@ -108,13 +109,16 @@ public DefaultWebClientBuilder(DefaultWebClientBuilder other) { else { this.defaultHeaders = null; } + this.defaultCookies = (other.defaultCookies != null ? new LinkedMultiValueMap<>(other.defaultCookies) : null); this.defaultRequest = other.defaultRequest; - this.filters = other.filters != null ? new ArrayList<>(other.filters) : null; + this.filters = (other.filters != null ? new ArrayList<>(other.filters) : null); + this.connector = other.connector; this.strategies = other.strategies; - this.strategiesConfigurers = other.strategiesConfigurers != null ? new ArrayList<>(other.strategiesConfigurers) : null; + this.strategiesConfigurers = (other.strategiesConfigurers != null ? + new ArrayList<>(other.strategiesConfigurers) : null); this.exchangeFunction = other.exchangeFunction; } @@ -260,8 +264,8 @@ public WebClient build() { .map(filter -> filter.apply(exchange)) .orElse(exchange) : exchange); return new DefaultWebClient(filteredExchange, initUriBuilderFactory(), - this.defaultHeaders != null ? unmodifiableCopy(this.defaultHeaders) : null, - this.defaultCookies != null ? unmodifiableCopy(this.defaultCookies) : null, + this.defaultHeaders != null ? HttpHeaders.readOnlyHttpHeaders(this.defaultHeaders) : null, + this.defaultCookies != null ? CollectionUtils.unmodifiableMultiValueMap(this.defaultCookies) : null, this.defaultRequest, new DefaultWebClientBuilder(this)); } @@ -280,10 +284,10 @@ else if (jettyClientPresent) { private ExchangeStrategies initExchangeStrategies() { if (CollectionUtils.isEmpty(this.strategiesConfigurers)) { - return this.strategies != null ? this.strategies : ExchangeStrategies.withDefaults(); + return (this.strategies != null ? this.strategies : ExchangeStrategies.withDefaults()); } ExchangeStrategies.Builder builder = - this.strategies != null ? this.strategies.mutate() : ExchangeStrategies.builder(); + (this.strategies != null ? this.strategies.mutate() : ExchangeStrategies.builder()); this.strategiesConfigurers.forEach(configurer -> configurer.accept(builder)); return builder.build(); } @@ -292,18 +296,10 @@ private UriBuilderFactory initUriBuilderFactory() { if (this.uriBuilderFactory != null) { return this.uriBuilderFactory; } - DefaultUriBuilderFactory factory = this.baseUrl != null ? - new DefaultUriBuilderFactory(this.baseUrl) : new DefaultUriBuilderFactory(); + DefaultUriBuilderFactory factory = (this.baseUrl != null ? + new DefaultUriBuilderFactory(this.baseUrl) : new DefaultUriBuilderFactory()); factory.setDefaultUriVariables(this.defaultUriVariables); return factory; } - private static HttpHeaders unmodifiableCopy(HttpHeaders headers) { - return HttpHeaders.readOnlyHttpHeaders(headers); - } - - private static MultiValueMap unmodifiableCopy(MultiValueMap map) { - return CollectionUtils.unmodifiableMultiValueMap(new LinkedMultiValueMap<>(map)); - } - }