Upgrade to Spring Framework 6.1.0-M1
Closes gh-35977 Closes gh-35980
This commit is contained in:
@@ -151,7 +151,6 @@ public final class ClientHttpRequestFactories {
|
||||
settings.sslBundle());
|
||||
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
|
||||
map.from(settings::connectTimeout).asInt(Duration::toMillis).to(requestFactory::setConnectTimeout);
|
||||
map.from(settings::bufferRequestBody).to(requestFactory::setBufferRequestBody);
|
||||
return requestFactory;
|
||||
}
|
||||
|
||||
@@ -187,8 +186,6 @@ public final class ClientHttpRequestFactories {
|
||||
static class OkHttp {
|
||||
|
||||
static OkHttp3ClientHttpRequestFactory get(ClientHttpRequestFactorySettings settings) {
|
||||
Assert.state(settings.bufferRequestBody() == null,
|
||||
() -> "OkHttp3ClientHttpRequestFactory does not support request body buffering");
|
||||
OkHttp3ClientHttpRequestFactory requestFactory = createRequestFactory(settings.sslBundle());
|
||||
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
|
||||
map.from(settings::connectTimeout).asInt(Duration::toMillis).to(requestFactory::setConnectTimeout);
|
||||
@@ -227,7 +224,6 @@ public final class ClientHttpRequestFactories {
|
||||
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
|
||||
map.from(settings::readTimeout).asInt(Duration::toMillis).to(requestFactory::setReadTimeout);
|
||||
map.from(settings::connectTimeout).asInt(Duration::toMillis).to(requestFactory::setConnectTimeout);
|
||||
map.from(settings::bufferRequestBody).to(requestFactory::setBufferRequestBody);
|
||||
return requestFactory;
|
||||
}
|
||||
|
||||
@@ -274,8 +270,6 @@ public final class ClientHttpRequestFactories {
|
||||
PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull();
|
||||
map.from(settings::connectTimeout).to((connectTimeout) -> setConnectTimeout(unwrapped, connectTimeout));
|
||||
map.from(settings::readTimeout).to((readTimeout) -> setReadTimeout(unwrapped, readTimeout));
|
||||
map.from(settings::bufferRequestBody)
|
||||
.to((bufferRequestBody) -> setBufferRequestBody(unwrapped, bufferRequestBody));
|
||||
}
|
||||
|
||||
private static ClientHttpRequestFactory unwrapRequestFactoryIfNecessary(
|
||||
@@ -305,11 +299,6 @@ public final class ClientHttpRequestFactories {
|
||||
invoke(factory, method, timeout);
|
||||
}
|
||||
|
||||
private static void setBufferRequestBody(ClientHttpRequestFactory factory, boolean bufferRequestBody) {
|
||||
Method method = findMethod(factory, "setBufferRequestBody", boolean.class);
|
||||
invoke(factory, method, bufferRequestBody);
|
||||
}
|
||||
|
||||
private static Method findMethod(ClientHttpRequestFactory requestFactory, String methodName,
|
||||
Class<?>... parameters) {
|
||||
Method method = ReflectionUtils.findMethod(requestFactory.getClass(), methodName, parameters);
|
||||
|
||||
@@ -69,7 +69,6 @@ class ClientHttpRequestFactoriesRuntimeHints implements RuntimeHintsRegistrar {
|
||||
Class<? extends ClientHttpRequestFactory> requestFactoryType) {
|
||||
registerMethod(hints, requestFactoryType, "setConnectTimeout", int.class);
|
||||
registerMethod(hints, requestFactoryType, "setReadTimeout", int.class);
|
||||
registerMethod(hints, requestFactoryType, "setBufferRequestBody", boolean.class);
|
||||
}
|
||||
|
||||
private void registerMethod(ReflectionHints hints, Class<? extends ClientHttpRequestFactory> requestFactoryType,
|
||||
|
||||
@@ -26,7 +26,6 @@ import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
*
|
||||
* @param connectTimeout the connect timeout
|
||||
* @param readTimeout the read timeout
|
||||
* @param bufferRequestBody if request body buffering is used
|
||||
* @param sslBundle the SSL bundle providing SSL configuration
|
||||
* @author Andy Wilkinson
|
||||
* @author Phillip Webb
|
||||
@@ -34,8 +33,7 @@ import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
* @since 3.0.0
|
||||
* @see ClientHttpRequestFactories
|
||||
*/
|
||||
public record ClientHttpRequestFactorySettings(Duration connectTimeout, Duration readTimeout, Boolean bufferRequestBody,
|
||||
SslBundle sslBundle) {
|
||||
public record ClientHttpRequestFactorySettings(Duration connectTimeout, Duration readTimeout, SslBundle sslBundle) {
|
||||
|
||||
/**
|
||||
* Use defaults for the {@link ClientHttpRequestFactory} which can differ depending on
|
||||
@@ -48,15 +46,29 @@ public record ClientHttpRequestFactorySettings(Duration connectTimeout, Duration
|
||||
* Create a new {@link ClientHttpRequestFactorySettings} instance.
|
||||
* @param connectTimeout the connection timeout
|
||||
* @param readTimeout the read timeout
|
||||
* @param bufferRequestBody the bugger request body
|
||||
* @param sslBundle the ssl bundle
|
||||
* @since 3.1.0
|
||||
* @param bufferRequestBody if request body buffering is used
|
||||
* @deprecated since 3.2.0 for removal in 3.4.0 as support for buffering has been
|
||||
* removed in Spring Framework 6.1
|
||||
*/
|
||||
public ClientHttpRequestFactorySettings {
|
||||
@Deprecated(since = "3.2.0", forRemoval = true)
|
||||
public ClientHttpRequestFactorySettings(Duration connectTimeout, Duration readTimeout, Boolean bufferRequestBody) {
|
||||
this(connectTimeout, readTimeout, (SslBundle) null);
|
||||
}
|
||||
|
||||
public ClientHttpRequestFactorySettings(Duration connectTimeout, Duration readTimeout, Boolean bufferRequestBody) {
|
||||
this(connectTimeout, readTimeout, bufferRequestBody, null);
|
||||
/**
|
||||
* Create a new {@link ClientHttpRequestFactorySettings} instance.
|
||||
* @param connectTimeout the connection timeout
|
||||
* @param readTimeout the read timeout
|
||||
* @param bufferRequestBody if request body buffering is used
|
||||
* @param sslBundle the ssl bundle
|
||||
* @since 3.1.0
|
||||
* @deprecated since 3.2.0 for removal in 3.4.0 as support for buffering has been
|
||||
* removed in Spring Framework 6.1
|
||||
*/
|
||||
@Deprecated(since = "3.2.0", forRemoval = true)
|
||||
public ClientHttpRequestFactorySettings(Duration connectTimeout, Duration readTimeout, Boolean bufferRequestBody,
|
||||
SslBundle sslBundle) {
|
||||
this(connectTimeout, readTimeout, sslBundle);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -66,8 +78,7 @@ public record ClientHttpRequestFactorySettings(Duration connectTimeout, Duration
|
||||
* @return a new {@link ClientHttpRequestFactorySettings} instance
|
||||
*/
|
||||
public ClientHttpRequestFactorySettings withConnectTimeout(Duration connectTimeout) {
|
||||
return new ClientHttpRequestFactorySettings(connectTimeout, this.readTimeout, this.bufferRequestBody,
|
||||
this.sslBundle);
|
||||
return new ClientHttpRequestFactorySettings(connectTimeout, this.readTimeout, this.sslBundle);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -78,19 +89,19 @@ public record ClientHttpRequestFactorySettings(Duration connectTimeout, Duration
|
||||
*/
|
||||
|
||||
public ClientHttpRequestFactorySettings withReadTimeout(Duration readTimeout) {
|
||||
return new ClientHttpRequestFactorySettings(this.connectTimeout, readTimeout, this.bufferRequestBody,
|
||||
this.sslBundle);
|
||||
return new ClientHttpRequestFactorySettings(this.connectTimeout, readTimeout, this.sslBundle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Return a new {@link ClientHttpRequestFactorySettings} instance with an updated
|
||||
* buffer request body setting.
|
||||
* Has no effect as support for buffering has been removed in Spring Framework 6.1.
|
||||
* @param bufferRequestBody the new buffer request body setting
|
||||
* @return a new {@link ClientHttpRequestFactorySettings} instance
|
||||
* @deprecated since 3.2.0 for removal in 3.4.0 as support for buffering has been
|
||||
* removed in Spring Framework 6.1
|
||||
*/
|
||||
@Deprecated(since = "3.2.0", forRemoval = true)
|
||||
public ClientHttpRequestFactorySettings withBufferRequestBody(Boolean bufferRequestBody) {
|
||||
return new ClientHttpRequestFactorySettings(this.connectTimeout, this.readTimeout, bufferRequestBody,
|
||||
this.sslBundle);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -101,8 +112,18 @@ public record ClientHttpRequestFactorySettings(Duration connectTimeout, Duration
|
||||
* @since 3.1.0
|
||||
*/
|
||||
public ClientHttpRequestFactorySettings withSslBundle(SslBundle sslBundle) {
|
||||
return new ClientHttpRequestFactorySettings(this.connectTimeout, this.readTimeout, this.bufferRequestBody,
|
||||
sslBundle);
|
||||
return new ClientHttpRequestFactorySettings(this.connectTimeout, this.readTimeout, sslBundle);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether request body buffering is used.
|
||||
* @return whether request body buffering is used
|
||||
* @deprecated since 3.2.0 for removal in 3.4.0 as support for buffering has been
|
||||
* removed in Spring Framework 6.1
|
||||
*/
|
||||
@Deprecated(since = "3.2.0", forRemoval = true)
|
||||
public Boolean bufferRequestBody() {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -440,19 +440,18 @@ public class RestTemplateBuilder {
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets if the underlying {@link ClientHttpRequestFactory} should buffer the
|
||||
* {@linkplain ClientHttpRequest#getBody() request body} internally.
|
||||
* Has no effect as support for buffering has been removed in Spring Framework 6.1.
|
||||
* @param bufferRequestBody value of the bufferRequestBody parameter
|
||||
* @return a new builder instance.
|
||||
* @since 2.2.0
|
||||
* @deprecated since 3.2.0 for removal in 3.4.0 as support for buffering has been
|
||||
* removed in Spring Framework 6.1
|
||||
* @see SimpleClientHttpRequestFactory#setBufferRequestBody(boolean)
|
||||
* @see HttpComponentsClientHttpRequestFactory#setBufferRequestBody(boolean)
|
||||
*/
|
||||
@Deprecated(since = "3.2.0", forRemoval = true)
|
||||
public RestTemplateBuilder setBufferRequestBody(boolean bufferRequestBody) {
|
||||
return new RestTemplateBuilder(this.requestFactorySettings.withBufferRequestBody(bufferRequestBody),
|
||||
this.detectRequestFactory, this.rootUri, this.messageConverters, this.interceptors, this.requestFactory,
|
||||
this.uriTemplateHandler, this.errorHandler, this.basicAuthentication, this.defaultHeaders,
|
||||
this.customizers, this.requestCustomizers);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -113,7 +113,7 @@ public class HttpWebServiceMessageSenderBuilder {
|
||||
|
||||
private ClientHttpRequestFactory getRequestFactory() {
|
||||
ClientHttpRequestFactorySettings settings = new ClientHttpRequestFactorySettings(this.connectTimeout,
|
||||
this.readTimeout, null, this.sslBundle);
|
||||
this.readTimeout, this.sslBundle);
|
||||
return (this.requestFactory != null) ? this.requestFactory.apply(settings)
|
||||
: ClientHttpRequestFactories.get(settings);
|
||||
}
|
||||
|
||||
@@ -27,7 +27,6 @@ import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||
|
||||
/**
|
||||
* Tests for {@link ClientHttpRequestFactories} when OkHttp 3 is the predominant HTTP
|
||||
@@ -50,12 +49,6 @@ class ClientHttpRequestFactoriesOkHttp3Tests
|
||||
.startsWith("okhttp-3.");
|
||||
}
|
||||
|
||||
@Test
|
||||
void getFailsWhenBufferRequestBodyIsEnabled() {
|
||||
assertThatIllegalStateException().isThrownBy(() -> ClientHttpRequestFactories
|
||||
.get(ClientHttpRequestFactorySettings.DEFAULTS.withBufferRequestBody(true)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected long connectTimeout(OkHttp3ClientHttpRequestFactory requestFactory) {
|
||||
return ((OkHttpClient) ReflectionTestUtils.getField(requestFactory, "client")).connectTimeoutMillis();
|
||||
|
||||
@@ -26,7 +26,6 @@ import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
|
||||
|
||||
/**
|
||||
* Tests for {@link ClientHttpRequestFactories} when OkHttp 4 is the predominant HTTP
|
||||
@@ -48,12 +47,6 @@ class ClientHttpRequestFactoriesOkHttp4Tests
|
||||
.startsWith("okhttp-4.");
|
||||
}
|
||||
|
||||
@Test
|
||||
void getFailsWhenBufferRequestBodyIsEnabled() {
|
||||
assertThatIllegalStateException().isThrownBy(() -> ClientHttpRequestFactories
|
||||
.get(ClientHttpRequestFactorySettings.DEFAULTS.withBufferRequestBody(true)));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected long connectTimeout(OkHttp3ClientHttpRequestFactory requestFactory) {
|
||||
return ((OkHttpClient) ReflectionTestUtils.getField(requestFactory, "client")).connectTimeoutMillis();
|
||||
|
||||
@@ -59,12 +59,6 @@ class ClientHttpRequestFactoriesRuntimeHintsTests {
|
||||
assertThat(reflection
|
||||
.onMethod(method(HttpComponentsClientHttpRequestFactory.class, "setConnectTimeout", int.class)))
|
||||
.accepts(hints);
|
||||
assertThat(
|
||||
reflection.onMethod(method(HttpComponentsClientHttpRequestFactory.class, "setReadTimeout", int.class)))
|
||||
.accepts(hints);
|
||||
assertThat(reflection
|
||||
.onMethod(method(HttpComponentsClientHttpRequestFactory.class, "setBufferRequestBody", boolean.class)))
|
||||
.accepts(hints);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -88,9 +82,6 @@ class ClientHttpRequestFactoriesRuntimeHintsTests {
|
||||
.accepts(hints);
|
||||
assertThat(reflection.onMethod(method(SimpleClientHttpRequestFactory.class, "setReadTimeout", int.class)))
|
||||
.accepts(hints);
|
||||
assertThat(reflection
|
||||
.onMethod(method(SimpleClientHttpRequestFactory.class, "setBufferRequestBody", boolean.class)))
|
||||
.accepts(hints);
|
||||
}
|
||||
|
||||
private static Method method(Class<?> target, String name, Class<?>... parameterTypes) {
|
||||
|
||||
@@ -100,14 +100,6 @@ class ClientHttpRequestFactoriesTests {
|
||||
.isEqualTo(Duration.ofSeconds(90).toMillis());
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOfUnknownTypeWithBodyBufferingCreatesFactoryAndConfiguresBodyBuffering() {
|
||||
ClientHttpRequestFactory requestFactory = ClientHttpRequestFactories.get(TestClientHttpRequestFactory.class,
|
||||
ClientHttpRequestFactorySettings.DEFAULTS.withBufferRequestBody(true));
|
||||
assertThat(requestFactory).isInstanceOf(TestClientHttpRequestFactory.class);
|
||||
assertThat(((TestClientHttpRequestFactory) requestFactory).bufferRequestBody).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOfUnconfigurableTypeWithConnectTimeoutThrows() {
|
||||
assertThatIllegalStateException()
|
||||
@@ -124,14 +116,6 @@ class ClientHttpRequestFactoriesTests {
|
||||
.withMessageContaining("suitable setReadTimeout method");
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOfUnconfigurableTypeWithBodyBufferingThrows() {
|
||||
assertThatIllegalStateException()
|
||||
.isThrownBy(() -> ClientHttpRequestFactories.get(UnconfigurableClientHttpRequestFactory.class,
|
||||
ClientHttpRequestFactorySettings.DEFAULTS.withBufferRequestBody(true)))
|
||||
.withMessageContaining("suitable setBufferRequestBody method");
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOfTypeWithDeprecatedConnectTimeoutThrowsWithConnectTimeout() {
|
||||
assertThatIllegalStateException()
|
||||
@@ -148,14 +132,6 @@ class ClientHttpRequestFactoriesTests {
|
||||
.withMessageContaining("setReadTimeout method marked as deprecated");
|
||||
}
|
||||
|
||||
@Test
|
||||
void getOfTypeWithDeprecatedBufferRequestBodyThrowsWithBufferRequestBody() {
|
||||
assertThatIllegalStateException()
|
||||
.isThrownBy(() -> ClientHttpRequestFactories.get(DeprecatedMethodsClientHttpRequestFactory.class,
|
||||
ClientHttpRequestFactorySettings.DEFAULTS.withBufferRequestBody(false)))
|
||||
.withMessageContaining("setBufferRequestBody method marked as deprecated");
|
||||
}
|
||||
|
||||
@Test
|
||||
void connectTimeoutCanBeConfiguredOnAWrappedRequestFactory() {
|
||||
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
|
||||
@@ -176,25 +152,12 @@ class ClientHttpRequestFactoriesTests {
|
||||
assertThat(requestFactory).hasFieldOrPropertyWithValue("readTimeout", 1234);
|
||||
}
|
||||
|
||||
@Test
|
||||
void bufferRequestBodyCanBeConfiguredOnAWrappedRequestFactory() {
|
||||
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
|
||||
assertThat(requestFactory).hasFieldOrPropertyWithValue("bufferRequestBody", true);
|
||||
BufferingClientHttpRequestFactory result = ClientHttpRequestFactories.get(
|
||||
() -> new BufferingClientHttpRequestFactory(requestFactory),
|
||||
ClientHttpRequestFactorySettings.DEFAULTS.withBufferRequestBody(false));
|
||||
assertThat(result).extracting("requestFactory").isSameAs(requestFactory);
|
||||
assertThat(requestFactory).hasFieldOrPropertyWithValue("bufferRequestBody", false);
|
||||
}
|
||||
|
||||
public static class TestClientHttpRequestFactory implements ClientHttpRequestFactory {
|
||||
|
||||
private int connectTimeout;
|
||||
|
||||
private int readTimeout;
|
||||
|
||||
private boolean bufferRequestBody;
|
||||
|
||||
@Override
|
||||
public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException {
|
||||
throw new UnsupportedOperationException();
|
||||
@@ -208,10 +171,6 @@ class ClientHttpRequestFactoriesTests {
|
||||
this.readTimeout = timeout;
|
||||
}
|
||||
|
||||
public void setBufferRequestBody(boolean bufferRequestBody) {
|
||||
this.bufferRequestBody = bufferRequestBody;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static class UnconfigurableClientHttpRequestFactory implements ClientHttpRequestFactory {
|
||||
|
||||
@@ -39,7 +39,6 @@ class ClientHttpRequestFactorySettingsTests {
|
||||
ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.DEFAULTS;
|
||||
assertThat(settings.connectTimeout()).isNull();
|
||||
assertThat(settings.readTimeout()).isNull();
|
||||
assertThat(settings.bufferRequestBody()).isNull();
|
||||
assertThat(settings.sslBundle()).isNull();
|
||||
}
|
||||
|
||||
@@ -49,7 +48,6 @@ class ClientHttpRequestFactorySettingsTests {
|
||||
.withConnectTimeout(ONE_SECOND);
|
||||
assertThat(settings.connectTimeout()).isEqualTo(ONE_SECOND);
|
||||
assertThat(settings.readTimeout()).isNull();
|
||||
assertThat(settings.bufferRequestBody()).isNull();
|
||||
assertThat(settings.sslBundle()).isNull();
|
||||
}
|
||||
|
||||
@@ -59,17 +57,6 @@ class ClientHttpRequestFactorySettingsTests {
|
||||
.withReadTimeout(ONE_SECOND);
|
||||
assertThat(settings.connectTimeout()).isNull();
|
||||
assertThat(settings.readTimeout()).isEqualTo(ONE_SECOND);
|
||||
assertThat(settings.bufferRequestBody()).isNull();
|
||||
assertThat(settings.sslBundle()).isNull();
|
||||
}
|
||||
|
||||
@Test
|
||||
void withBufferRequestBodyReturnsInstanceWithUpdatedBufferRequestBody() {
|
||||
ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.DEFAULTS
|
||||
.withBufferRequestBody(true);
|
||||
assertThat(settings.connectTimeout()).isNull();
|
||||
assertThat(settings.readTimeout()).isNull();
|
||||
assertThat(settings.bufferRequestBody()).isTrue();
|
||||
assertThat(settings.sslBundle()).isNull();
|
||||
}
|
||||
|
||||
@@ -79,7 +66,6 @@ class ClientHttpRequestFactorySettingsTests {
|
||||
ClientHttpRequestFactorySettings settings = ClientHttpRequestFactorySettings.DEFAULTS.withSslBundle(sslBundle);
|
||||
assertThat(settings.connectTimeout()).isNull();
|
||||
assertThat(settings.readTimeout()).isNull();
|
||||
assertThat(settings.bufferRequestBody()).isNull();
|
||||
assertThat(settings.sslBundle()).isSameAs(sslBundle);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user