From 0622b805d3b34add8ac0815949c153e1dba49179 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 is not available. Closes gh-35607 Signed-off-by: Edgar Asatryan --- .../test/web/reactive/server/DefaultWebTestClientBuilder.java | 3 ++- .../web/reactive/function/client/DefaultWebClientBuilder.java | 3 ++- 2 files changed, 4 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 719012d8f4dc..e4b46ba44196 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,8 @@ class DefaultWebTestClientBuilder implements WebTestClient.Builder { static { ClassLoader loader = DefaultWebTestClientBuilder.class.getClassLoader(); REACTOR_NETTY_CLIENT_PRESENT = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", loader); - JETTY_CLIENT_PRESENT = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader); + JETTY_CLIENT_PRESENT = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader) && + ClassUtils.isPresent("org.eclipse.jetty.reactive.client.ReactiveRequest", loader); HTTP_COMPONENTS_CLIENT_PRESENT = 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 bbab8fea18d4..d9ce191706aa 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 @@ -64,7 +64,8 @@ final class DefaultWebClientBuilder implements WebClient.Builder { static { ClassLoader loader = DefaultWebClientBuilder.class.getClassLoader(); REACTOR_NETTY_CLIENT_PRESENT = ClassUtils.isPresent("reactor.netty.http.client.HttpClient", loader); - JETTY_CLIENT_PRESENT = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader); + JETTY_CLIENT_PRESENT = ClassUtils.isPresent("org.eclipse.jetty.client.HttpClient", loader) && + ClassUtils.isPresent("org.eclipse.jetty.reactive.client.ReactiveRequest", loader); HTTP_COMPONENTS_CLIENT_PRESENT = ClassUtils.isPresent("org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient", loader) && ClassUtils.isPresent("org.apache.hc.core5.reactive.ReactiveDataConsumer", loader);