Remove most deprecated APIs that were due for removal in 4.0

Support for rest controller, controler, and servlet endpoints has
been kept for now.

Issue: 45600
This commit is contained in:
Andy Wilkinson
2025-06-10 20:11:08 +01:00
committed by Phillip Webb
parent bf385649ec
commit a78797a2ba
192 changed files with 94 additions and 10953 deletions

View File

@@ -21,28 +21,18 @@ import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import java.time.Duration;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.UnaryOperator;
import javax.net.ssl.SSLContext;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.cookie.StandardCookieSpec;
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy;
import org.apache.hc.client5.http.ssl.TlsSocketStrategy;
import org.apache.hc.core5.http.io.SocketConfig;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.http.ssl.TLS;
import org.apache.hc.core5.ssl.SSLContextBuilder;
import org.apache.hc.core5.ssl.TrustStrategy;
@@ -61,7 +51,6 @@ import org.springframework.http.HttpMethod;
import org.springframework.http.RequestEntity;
import org.springframework.http.RequestEntity.UriTemplateRequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.util.Assert;
import org.springframework.util.ObjectUtils;
import org.springframework.web.client.NoOpResponseErrorHandler;
@@ -162,9 +151,6 @@ public class TestRestTemplate {
if (requestFactoryBuilder instanceof HttpComponentsClientHttpRequestFactoryBuilder) {
builder = builder.requestFactoryBuilder(applyHttpClientOptions(
(HttpComponentsClientHttpRequestFactoryBuilder) requestFactoryBuilder, httpClientOptions));
if (HttpClientOption.ENABLE_REDIRECTS.isPresent(httpClientOptions)) {
builder = builder.redirects(HttpRedirects.FOLLOW);
}
}
if (username != null || password != null) {
builder = builder.basicAuthentication(username, password);
@@ -1056,14 +1042,6 @@ public class TestRestTemplate {
*/
ENABLE_COOKIES,
/**
* Enable redirects.
* @deprecated since 3.5.0 for removal in 4.0.0 in favor of
* {@link TestRestTemplate#withRedirects(HttpRedirects)}
*/
@Deprecated(since = "3.5.0", forRemoval = true)
ENABLE_REDIRECTS,
/**
* Use a {@link TlsSocketStrategy} that trusts self-signed certificates.
*/
@@ -1075,89 +1053,6 @@ public class TestRestTemplate {
}
/**
* {@link HttpComponentsClientHttpRequestFactory} to apply customizations.
*
* @deprecated since 3.5.0 for removal in 4.0.0
*/
@Deprecated(since = "3.5.0", forRemoval = true)
protected static class CustomHttpComponentsClientHttpRequestFactory extends HttpComponentsClientHttpRequestFactory {
private final String cookieSpec;
private final boolean enableRedirects;
/**
* Create a new {@link CustomHttpComponentsClientHttpRequestFactory} instance.
* @param httpClientOptions the {@link HttpClient} options
* @param settings the settings to apply
*/
public CustomHttpComponentsClientHttpRequestFactory(HttpClientOption[] httpClientOptions,
ClientHttpRequestFactorySettings settings) {
this.cookieSpec = (HttpClientOption.ENABLE_COOKIES.isPresent(httpClientOptions) ? StandardCookieSpec.STRICT
: StandardCookieSpec.IGNORE);
this.enableRedirects = settings.redirects() != HttpRedirects.DONT_FOLLOW;
boolean ssl = HttpClientOption.SSL.isPresent(httpClientOptions);
if (settings.readTimeout() != null || ssl) {
setHttpClient(createHttpClient(settings.readTimeout(), ssl));
}
if (settings.connectTimeout() != null) {
setConnectTimeout((int) settings.connectTimeout().toMillis());
}
}
private HttpClient createHttpClient(Duration readTimeout, boolean ssl) {
try {
HttpClientBuilder builder = HttpClients.custom();
builder.setConnectionManager(createConnectionManager(readTimeout, ssl));
builder.setDefaultRequestConfig(createRequestConfig());
return builder.build();
}
catch (Exception ex) {
throw new IllegalStateException("Unable to create customized HttpClient", ex);
}
}
private PoolingHttpClientConnectionManager createConnectionManager(Duration readTimeout, boolean ssl)
throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException {
PoolingHttpClientConnectionManagerBuilder builder = PoolingHttpClientConnectionManagerBuilder.create();
if (ssl) {
builder.setTlsSocketStrategy(createTlsSocketStrategy());
}
if (readTimeout != null) {
SocketConfig socketConfig = SocketConfig.custom()
.setSoTimeout((int) readTimeout.toMillis(), TimeUnit.MILLISECONDS)
.build();
builder.setDefaultSocketConfig(socketConfig);
}
return builder.build();
}
private TlsSocketStrategy createTlsSocketStrategy()
throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
.build();
return new DefaultClientTlsStrategy(sslContext, new String[] { TLS.V_1_3.getId(), TLS.V_1_2.getId() }, null,
null, null);
}
@Override
protected HttpContext createHttpContext(HttpMethod httpMethod, URI uri) {
HttpClientContext context = HttpClientContext.create();
context.setRequestConfig(createRequestConfig());
return context;
}
protected RequestConfig createRequestConfig() {
RequestConfig.Builder builder = RequestConfig.custom();
builder.setCookieSpec(this.cookieSpec);
builder.setAuthenticationEnabled(false);
builder.setRedirectsEnabled(this.enableRedirects);
return builder.build();
}
}
/**
* Factory used to create a {@link TlsSocketStrategy} supporting self-signed
* certificates.

View File

@@ -140,11 +140,8 @@ class TestRestTemplateTests {
}
@Test
@SuppressWarnings("removal")
void options() {
RequestConfig config = getRequestConfig(
new TestRestTemplate(HttpClientOption.ENABLE_REDIRECTS, HttpClientOption.ENABLE_COOKIES));
assertThat(config.isRedirectsEnabled()).isTrue();
RequestConfig config = getRequestConfig(new TestRestTemplate(HttpClientOption.ENABLE_COOKIES));
assertThat(config.getCookieSpec()).isEqualTo("strict");
}
@@ -164,13 +161,9 @@ class TestRestTemplateTests {
RestTemplateBuilder builder = new RestTemplateBuilder()
.requestFactoryBuilder(ClientHttpRequestFactoryBuilder.httpComponents());
assertThat(getRedirectStrategy((RestTemplateBuilder) null)).matches(this::isFollowStrategy);
assertThat(getRedirectStrategy(null, HttpClientOption.ENABLE_REDIRECTS)).matches(this::isFollowStrategy);
assertThat(getRedirectStrategy(builder)).matches(this::isFollowStrategy);
assertThat(getRedirectStrategy(builder, HttpClientOption.ENABLE_REDIRECTS)).matches(this::isFollowStrategy);
assertThat(getRedirectStrategy(builder.redirects(HttpRedirects.DONT_FOLLOW)))
.matches(this::isDontFollowStrategy);
assertThat(getRedirectStrategy(builder.redirects(HttpRedirects.DONT_FOLLOW), HttpClientOption.ENABLE_REDIRECTS))
.matches(this::isFollowStrategy);
}
@Test