Support package private requestFactory classes

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

Fixes gh-7319
This commit is contained in:
Phillip Webb 2016-11-04 15:58:27 -07:00
parent 90afc8ebbe
commit 1bd53ea9d8
2 changed files with 26 additions and 1 deletions

View File

@ -16,6 +16,7 @@
package org.springframework.boot.web.client;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
@ -317,7 +318,19 @@ public class RestTemplateBuilder {
public RestTemplateBuilder requestFactory(
Class<? extends ClientHttpRequestFactory> requestFactory) {
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);
}
}
/**

View File

@ -278,6 +278,14 @@ public class RestTemplateBuilderTests {
.isInstanceOf(SimpleClientHttpRequestFactory.class);
}
@Test
public void requestFactoryPackagePrivateClassShouldApply() throws Exception {
RestTemplate template = this.builder
.requestFactory(TestClientHttpRequestFactory.class).build();
assertThat(template.getRequestFactory())
.isInstanceOf(TestClientHttpRequestFactory.class);
}
@Test
public void requestFactoryWhenFactoryIsNullShouldThrowException() throws Exception {
this.thrown.expect(IllegalArgumentException.class);
@ -547,4 +555,8 @@ public class RestTemplateBuilderTests {
}
static class TestClientHttpRequestFactory extends SimpleClientHttpRequestFactory {
}
}