From e44f84e8ee8ea072802b4207e635019f76e267df Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Wed, 28 Feb 2024 13:25:37 +0100 Subject: [PATCH] Restore Jetty 10 compatibility in JettyClientHttpResponse Closes gh-32337 --- .../reactive/JettyClientHttpResponse.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java index 0063d5b959f..e6c8bf6c685 100644 --- a/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java +++ b/spring-web/src/main/java/org/springframework/http/client/reactive/JettyClientHttpResponse.java @@ -21,7 +21,6 @@ import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.reactive.client.ReactiveResponse; import reactor.core.publisher.Flux; @@ -55,23 +54,29 @@ class JettyClientHttpResponse extends AbstractClientHttpResponse { } private static HttpHeaders adaptHeaders(ReactiveResponse response) { - MultiValueMap headers = new JettyHeadersAdapter(response.getHeaders()); + MultiValueMap headers = (Jetty10HttpFieldsHelper.jetty10Present() ? + Jetty10HttpFieldsHelper.getHttpHeaders(response.getResponse()) : + new JettyHeadersAdapter(response.getHeaders())); return HttpHeaders.readOnlyHttpHeaders(headers); } + private static MultiValueMap adaptCookies(ReactiveResponse response) { MultiValueMap result = new LinkedMultiValueMap<>(); - List cookieHeaders = response.getHeaders().getFields(HttpHeaders.SET_COOKIE); - cookieHeaders.forEach(header -> - HttpCookie.parse(header.getValue()).forEach(cookie -> result.add(cookie.getName(), + MultiValueMap headers = adaptHeaders(response); + List cookieHeader = headers.get(HttpHeaders.SET_COOKIE); + if (!CollectionUtils.isEmpty(cookieHeader)) { + cookieHeader.forEach(header -> + HttpCookie.parse(header).forEach(cookie -> result.add(cookie.getName(), ResponseCookie.fromClientResponse(cookie.getName(), cookie.getValue()) .domain(cookie.getDomain()) .path(cookie.getPath()) .maxAge(cookie.getMaxAge()) .secure(cookie.getSecure()) .httpOnly(cookie.isHttpOnly()) - .sameSite(parseSameSite(header.getValue())) + .sameSite(parseSameSite(header)) .build())) ); + } return CollectionUtils.unmodifiableMultiValueMap(result); }