From 94f56a2684a3f23cc0b64d93ee6e24acdbfca91f Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 6 Jul 2021 11:03:09 +0200 Subject: [PATCH] Improve Jetty 10 check on client-side Before this commit, JettyClientHttpResponse checked for the presence of a server-side class to determine whether it is running on Jetty 10. Unfortunately, that class is not necessarily present when just using the Jetty client. This commit improves the Jetty 10 check, so that it also works when the Jetty client is used without the server. Closes gh-27136 --- .../client/reactive/JettyClientHttpResponse.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 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 0a7d87281a..a41d18984f 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 @@ -33,7 +33,6 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseCookie; import org.springframework.lang.Nullable; import org.springframework.util.Assert; -import org.springframework.util.ClassUtils; import org.springframework.util.CollectionUtils; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; @@ -53,8 +52,7 @@ class JettyClientHttpResponse implements ClientHttpResponse { private static final ClassLoader loader = JettyClientHttpResponse.class.getClassLoader(); - private static final boolean jetty10Present = ClassUtils.isPresent( - "org.eclipse.jetty.websocket.server.JettyWebSocketServerContainer", loader); + private static final boolean jetty10Present; private final ReactiveResponse reactiveResponse; @@ -64,6 +62,17 @@ class JettyClientHttpResponse implements ClientHttpResponse { private final HttpHeaders headers; + static { + try { + Class httpFieldsClass = loader.loadClass("org.eclipse.jetty.http.HttpFields"); + jetty10Present = httpFieldsClass.isInterface(); + } + catch (ClassNotFoundException ex) { + throw new IllegalStateException("No compatible Jetty version found", ex); + } + } + + public JettyClientHttpResponse(ReactiveResponse reactiveResponse, Publisher content) { this.reactiveResponse = reactiveResponse; this.content = Flux.from(content);