Browse Source

Merge branch '3.5.x'

Closes gh-47679
pull/47694/head
Moritz Halbritter 2 months ago
parent
commit
1da46813b8
  1. 3
      module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/ClientHttpRequestFactoryRuntimeHints.java
  2. 42
      module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/ClientHttpRequestFactoryRuntimeHintsTests.java

3
module/spring-boot-http-client/src/main/java/org/springframework/boot/http/client/ClientHttpRequestFactoryRuntimeHints.java

@ -19,6 +19,7 @@ package org.springframework.boot.http.client;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.time.Duration;
import org.jspecify.annotations.Nullable; import org.jspecify.annotations.Nullable;
@ -89,7 +90,9 @@ class ClientHttpRequestFactoryRuntimeHints implements RuntimeHintsRegistrar {
private void registerReflectionHints(ReflectionHints hints, private void registerReflectionHints(ReflectionHints hints,
Class<? extends ClientHttpRequestFactory> requestFactoryType, Class<?> readTimeoutType) { Class<? extends ClientHttpRequestFactory> requestFactoryType, Class<?> readTimeoutType) {
registerMethod(hints, requestFactoryType, "setConnectTimeout", int.class); registerMethod(hints, requestFactoryType, "setConnectTimeout", int.class);
registerMethod(hints, requestFactoryType, "setConnectTimeout", Duration.class);
registerMethod(hints, requestFactoryType, "setReadTimeout", readTimeoutType); registerMethod(hints, requestFactoryType, "setReadTimeout", readTimeoutType);
registerMethod(hints, requestFactoryType, "setReadTimeout", Duration.class);
} }
private void registerMethod(ReflectionHints hints, Class<? extends ClientHttpRequestFactory> requestFactoryType, private void registerMethod(ReflectionHints hints, Class<? extends ClientHttpRequestFactory> requestFactoryType,

42
module/spring-boot-http-client/src/test/java/org/springframework/boot/http/client/ClientHttpRequestFactoryRuntimeHintsTests.java

@ -18,6 +18,7 @@ package org.springframework.boot.http.client;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.time.Duration;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
@ -26,6 +27,7 @@ import org.springframework.aot.hint.predicate.ReflectionHintsPredicates;
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
import org.springframework.http.client.AbstractClientHttpRequestFactoryWrapper; import org.springframework.http.client.AbstractClientHttpRequestFactoryWrapper;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.http.client.JdkClientHttpRequestFactory;
import org.springframework.http.client.JettyClientHttpRequestFactory; import org.springframework.http.client.JettyClientHttpRequestFactory;
import org.springframework.http.client.ReactorClientHttpRequestFactory; import org.springframework.http.client.ReactorClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory; import org.springframework.http.client.SimpleClientHttpRequestFactory;
@ -60,6 +62,15 @@ class ClientHttpRequestFactoryRuntimeHintsTests {
assertThat(reflection assertThat(reflection
.onMethodInvocation(method(HttpComponentsClientHttpRequestFactory.class, "setConnectTimeout", int.class))) .onMethodInvocation(method(HttpComponentsClientHttpRequestFactory.class, "setConnectTimeout", int.class)))
.accepts(hints); .accepts(hints);
assertThat(reflection.onMethodInvocation(
method(HttpComponentsClientHttpRequestFactory.class, "setConnectTimeout", Duration.class)))
.accepts(hints);
assertThat(reflection
.onMethodInvocation(method(HttpComponentsClientHttpRequestFactory.class, "setReadTimeout", int.class)))
.accepts(hints);
assertThat(reflection
.onMethodInvocation(method(HttpComponentsClientHttpRequestFactory.class, "setReadTimeout", Duration.class)))
.accepts(hints);
} }
@Test @Test
@ -70,9 +81,15 @@ class ClientHttpRequestFactoryRuntimeHintsTests {
assertThat(reflection assertThat(reflection
.onMethodInvocation(method(JettyClientHttpRequestFactory.class, "setConnectTimeout", int.class))) .onMethodInvocation(method(JettyClientHttpRequestFactory.class, "setConnectTimeout", int.class)))
.accepts(hints); .accepts(hints);
assertThat(reflection
.onMethodInvocation(method(JettyClientHttpRequestFactory.class, "setConnectTimeout", Duration.class)))
.accepts(hints);
assertThat(reflection assertThat(reflection
.onMethodInvocation(method(JettyClientHttpRequestFactory.class, "setReadTimeout", long.class))) .onMethodInvocation(method(JettyClientHttpRequestFactory.class, "setReadTimeout", long.class)))
.accepts(hints); .accepts(hints);
assertThat(reflection
.onMethodInvocation(method(JettyClientHttpRequestFactory.class, "setReadTimeout", Duration.class)))
.accepts(hints);
} }
@Test @Test
@ -83,9 +100,15 @@ class ClientHttpRequestFactoryRuntimeHintsTests {
assertThat(reflection assertThat(reflection
.onMethodInvocation(method(ReactorClientHttpRequestFactory.class, "setConnectTimeout", int.class))) .onMethodInvocation(method(ReactorClientHttpRequestFactory.class, "setConnectTimeout", int.class)))
.accepts(hints); .accepts(hints);
assertThat(reflection
.onMethodInvocation(method(ReactorClientHttpRequestFactory.class, "setConnectTimeout", Duration.class)))
.accepts(hints);
assertThat(reflection assertThat(reflection
.onMethodInvocation(method(ReactorClientHttpRequestFactory.class, "setReadTimeout", long.class))) .onMethodInvocation(method(ReactorClientHttpRequestFactory.class, "setReadTimeout", long.class)))
.accepts(hints); .accepts(hints);
assertThat(reflection
.onMethodInvocation(method(ReactorClientHttpRequestFactory.class, "setReadTimeout", Duration.class)))
.accepts(hints);
} }
@Test @Test
@ -96,9 +119,28 @@ class ClientHttpRequestFactoryRuntimeHintsTests {
assertThat(reflection assertThat(reflection
.onMethodInvocation(method(SimpleClientHttpRequestFactory.class, "setConnectTimeout", int.class))) .onMethodInvocation(method(SimpleClientHttpRequestFactory.class, "setConnectTimeout", int.class)))
.accepts(hints); .accepts(hints);
assertThat(reflection
.onMethodInvocation(method(SimpleClientHttpRequestFactory.class, "setConnectTimeout", Duration.class)))
.accepts(hints);
assertThat(reflection assertThat(reflection
.onMethodInvocation(method(SimpleClientHttpRequestFactory.class, "setReadTimeout", int.class))) .onMethodInvocation(method(SimpleClientHttpRequestFactory.class, "setReadTimeout", int.class)))
.accepts(hints); .accepts(hints);
assertThat(reflection
.onMethodInvocation(method(SimpleClientHttpRequestFactory.class, "setReadTimeout", Duration.class)))
.accepts(hints);
}
@Test
void shouldRegisterJdkHttpHints() {
RuntimeHints hints = new RuntimeHints();
new ClientHttpRequestFactoryRuntimeHints().registerHints(hints, getClass().getClassLoader());
ReflectionHintsPredicates reflection = RuntimeHintsPredicates.reflection();
assertThat(
reflection.onMethodInvocation(method(JdkClientHttpRequestFactory.class, "setReadTimeout", int.class)))
.accepts(hints);
assertThat(reflection
.onMethodInvocation(method(JdkClientHttpRequestFactory.class, "setReadTimeout", Duration.class)))
.accepts(hints);
} }
private static Method method(Class<?> target, String name, Class<?>... parameterTypes) { private static Method method(Class<?> target, String name, Class<?>... parameterTypes) {

Loading…
Cancel
Save