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 @@
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);
}
}
/**
......
......@@ -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 {
}
}
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