From fcc757782ceabb82974f8a5612cc403556510447 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Fri, 18 Oct 2024 11:50:09 +0100 Subject: [PATCH] Add runtime hints for ReactorClientHttpRequestFactory See gh-42587 --- .../ClientHttpRequestFactoriesRuntimeHints.java | 5 +++++ .../ClientHttpRequestFactoriesRuntimeHintsTests.java | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHints.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHints.java index cc76593aa00..9f243c4a9b6 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHints.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHints.java @@ -29,6 +29,7 @@ import org.springframework.http.client.AbstractClientHttpRequestFactoryWrapper; import org.springframework.http.client.ClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.JettyClientHttpRequestFactory; +import org.springframework.http.client.ReactorClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -63,6 +64,10 @@ class ClientHttpRequestFactoriesRuntimeHints implements RuntimeHintsRegistrar { typeHint.onReachableType(HttpURLConnection.class); registerReflectionHints(hints, SimpleClientHttpRequestFactory.class); }); + hints.registerTypeIfPresent(classLoader, ClientHttpRequestFactories.REACTOR_CLIENT_CLASS, (typeHint) -> { + typeHint.onReachableType(TypeReference.of(ClientHttpRequestFactories.REACTOR_CLIENT_CLASS)); + registerReflectionHints(hints, ReactorClientHttpRequestFactory.class, long.class); + }); } private void registerReflectionHints(ReflectionHints hints, diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHintsTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHintsTests.java index 8bf23c75e09..5ed87b2d882 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHintsTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHintsTests.java @@ -27,6 +27,7 @@ import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; import org.springframework.http.client.AbstractClientHttpRequestFactoryWrapper; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.JettyClientHttpRequestFactory; +import org.springframework.http.client.ReactorClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.util.ReflectionUtils; @@ -72,6 +73,17 @@ class ClientHttpRequestFactoriesRuntimeHintsTests { .accepts(hints); } + @Test + void shouldRegisterReactorHints() { + RuntimeHints hints = new RuntimeHints(); + new ClientHttpRequestFactoriesRuntimeHints().registerHints(hints, getClass().getClassLoader()); + ReflectionHintsPredicates reflection = RuntimeHintsPredicates.reflection(); + assertThat(reflection.onMethod(method(ReactorClientHttpRequestFactory.class, "setConnectTimeout", int.class))) + .accepts(hints); + assertThat(reflection.onMethod(method(ReactorClientHttpRequestFactory.class, "setReadTimeout", long.class))) + .accepts(hints); + } + @Test void shouldRegisterSimpleHttpHints() { RuntimeHints hints = new RuntimeHints();