From 141df5291d236a0c787f02a2b55d0f6e3055e716 Mon Sep 17 00:00:00 2001 From: Edgar Asatryan Date: Sat, 11 Oct 2025 20:16:37 +0400 Subject: [PATCH] Prevent NoClassDefFoundError when Jetty Reactive HttpClient not on classpath Closes gh-35608 Signed-off-by: Edgar Asatryan --- .../test/web/reactive/server/DefaultWebTestClientBuilder.java | 4 +++- .../web/reactive/function/client/DefaultWebClientBuilder.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClientBuilder.java b/spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClientBuilder.java index 3ce339e20c1..6114a8bb0c9 100644 --- a/spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClientBuilder.java +++ b/spring-test/src/main/java/org/springframework/test/web/reactive/server/DefaultWebTestClientBuilder.java @@ -67,7 +67,9 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder { ClassLoader loader = DefaultWebTestClientBuilder.class.getClassLoader(); reactorNettyClientPresent = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", loader); reactorNetty2ClientPresent = ClassUtils.isPresent("reactor.netty5.http.client.HttpClient", loader); - jettyClientPresent = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader); + jettyClientPresent = + ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader) && + ClassUtils.isPresent("org.eclipse.jetty.reactive.client.ReactiveRequest", loader); httpComponentsClientPresent = ClassUtils.isPresent("org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient", loader) && ClassUtils.isPresent("org.apache.hc.core5.reactive.ReactiveDataConsumer", loader); 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 653d8d2ab4c..a09a707eb8f 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 @@ -67,7 +67,9 @@ final class DefaultWebClientBuilder implements WebClient.Builder { ClassLoader loader = DefaultWebClientBuilder.class.getClassLoader(); reactorNettyClientPresent = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", loader); reactorNetty2ClientPresent = ClassUtils.isPresent("reactor.netty5.http.client.HttpClient", loader); - jettyClientPresent = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader); + jettyClientPresent = + ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader) && + ClassUtils.isPresent("org.eclipse.jetty.reactive.client.ReactiveRequest", loader); httpComponentsClientPresent = ClassUtils.isPresent("org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient", loader) && ClassUtils.isPresent("org.apache.hc.core5.reactive.ReactiveDataConsumer", loader);