Commit 1bd53ea9 authored by Phillip Webb's avatar Phillip Webb

Support package private requestFactory classes

Update `RestTemplateBuilder` to support package private `requestFactory`
classes.

Fixes gh-7319
parent 90afc8eb
...@@ -16,6 +16,7 @@ ...@@ -16,6 +16,7 @@
package org.springframework.boot.web.client; package org.springframework.boot.web.client;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList; import java.util.ArrayList;
...@@ -317,7 +318,19 @@ public class RestTemplateBuilder { ...@@ -317,7 +318,19 @@ public class RestTemplateBuilder {
public RestTemplateBuilder requestFactory( public RestTemplateBuilder requestFactory(
Class<? extends ClientHttpRequestFactory> requestFactory) { Class<? extends ClientHttpRequestFactory> requestFactory) {
Assert.notNull(requestFactory, "RequestFactory must not be null"); Assert.notNull(requestFactory, "RequestFactory must not be null");
return requestFactory(BeanUtils.instantiate(requestFactory)); return requestFactory(createRequestFactory(requestFactory));
}
private ClientHttpRequestFactory createRequestFactory(
Class<? extends ClientHttpRequestFactory> requestFactory) {
try {
Constructor<?> constructor = requestFactory.getDeclaredConstructor();
constructor.setAccessible(true);
return (ClientHttpRequestFactory) constructor.newInstance();
}
catch (Exception ex) {
throw new IllegalStateException(ex);
}
} }
/** /**
......
...@@ -278,6 +278,14 @@ public class RestTemplateBuilderTests { ...@@ -278,6 +278,14 @@ public class RestTemplateBuilderTests {
.isInstanceOf(SimpleClientHttpRequestFactory.class); .isInstanceOf(SimpleClientHttpRequestFactory.class);
} }
@Test
public void requestFactoryPackagePrivateClassShouldApply() throws Exception {
RestTemplate template = this.builder
.requestFactory(TestClientHttpRequestFactory.class).build();
assertThat(template.getRequestFactory())
.isInstanceOf(TestClientHttpRequestFactory.class);
}
@Test @Test
public void requestFactoryWhenFactoryIsNullShouldThrowException() throws Exception { public void requestFactoryWhenFactoryIsNullShouldThrowException() throws Exception {
this.thrown.expect(IllegalArgumentException.class); this.thrown.expect(IllegalArgumentException.class);
...@@ -547,4 +555,8 @@ public class RestTemplateBuilderTests { ...@@ -547,4 +555,8 @@ public class RestTemplateBuilderTests {
} }
static class TestClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
}
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment