mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-07-05 00:56:58 +08:00
Migrate remaining usage of httpclient API
This commit migrates our remaining usage of the httpclient 4.x to use instead httpclient5, now that the 4.x support has been removed in `RestTemplate`. Closes gh-32461
This commit is contained in:
parent
cc169e7623
commit
a0735eb3fb
@ -17,9 +17,11 @@
|
||||
package org.springframework.boot.devtools.tests;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
|
||||
import org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy;
|
||||
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||
import org.apache.hc.core5.util.TimeValue;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.MethodSource;
|
||||
|
||||
@ -37,9 +39,10 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
*/
|
||||
class DevToolsIntegrationTests extends AbstractDevToolsIntegrationTests {
|
||||
|
||||
private final TestRestTemplate template = new TestRestTemplate(
|
||||
new RestTemplateBuilder().requestFactory(() -> new HttpComponentsClientHttpRequestFactory(
|
||||
HttpClients.custom().setRetryHandler(new StandardHttpRequestRetryHandler(10, false)).build())));
|
||||
private final TestRestTemplate template = new TestRestTemplate(new RestTemplateBuilder()
|
||||
.requestFactory(() -> new HttpComponentsClientHttpRequestFactory(HttpClients.custom()
|
||||
.setRetryStrategy(new DefaultHttpRequestRetryStrategy(10, TimeValue.of(1, TimeUnit.SECONDS)))
|
||||
.build())));
|
||||
|
||||
@ParameterizedTest(name = "{0}")
|
||||
@MethodSource("parameters")
|
||||
|
@ -16,14 +16,13 @@
|
||||
|
||||
package org.springframework.boot.docs.io.restclient.resttemplate.customization;
|
||||
|
||||
import org.apache.http.HttpException;
|
||||
import org.apache.http.HttpHost;
|
||||
import org.apache.http.HttpRequest;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.conn.routing.HttpRoutePlanner;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.impl.conn.DefaultProxyRoutePlanner;
|
||||
import org.apache.http.protocol.HttpContext;
|
||||
import org.apache.hc.client5.http.classic.HttpClient;
|
||||
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
|
||||
import org.apache.hc.client5.http.impl.routing.DefaultProxyRoutePlanner;
|
||||
import org.apache.hc.client5.http.routing.HttpRoutePlanner;
|
||||
import org.apache.hc.core5.http.HttpException;
|
||||
import org.apache.hc.core5.http.HttpHost;
|
||||
import org.apache.hc.core5.http.protocol.HttpContext;
|
||||
|
||||
import org.springframework.boot.web.client.RestTemplateCustomizer;
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||
@ -45,11 +44,11 @@ public class MyRestTemplateCustomizer implements RestTemplateCustomizer {
|
||||
}
|
||||
|
||||
@Override
|
||||
public HttpHost determineProxy(HttpHost target, HttpRequest request, HttpContext context) throws HttpException {
|
||||
protected HttpHost determineProxy(HttpHost target, HttpContext context) throws HttpException {
|
||||
if (target.getHostName().equals("192.168.0.5")) {
|
||||
return null;
|
||||
}
|
||||
return super.determineProxy(target, request, context);
|
||||
return super.determineProxy(target, context);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -16,14 +16,13 @@
|
||||
|
||||
package org.springframework.boot.docs.io.restclient.resttemplate.customization
|
||||
|
||||
import org.apache.http.HttpException
|
||||
import org.apache.http.HttpHost
|
||||
import org.apache.http.HttpRequest
|
||||
import org.apache.http.client.HttpClient
|
||||
import org.apache.http.conn.routing.HttpRoutePlanner
|
||||
import org.apache.http.impl.client.HttpClientBuilder
|
||||
import org.apache.http.impl.conn.DefaultProxyRoutePlanner
|
||||
import org.apache.http.protocol.HttpContext
|
||||
import org.apache.hc.client5.http.classic.HttpClient
|
||||
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder
|
||||
import org.apache.hc.client5.http.impl.routing.DefaultProxyRoutePlanner
|
||||
import org.apache.hc.client5.http.routing.HttpRoutePlanner
|
||||
import org.apache.hc.core5.http.HttpException
|
||||
import org.apache.hc.core5.http.HttpHost
|
||||
import org.apache.hc.core5.http.protocol.HttpContext
|
||||
import org.springframework.boot.web.client.RestTemplateCustomizer
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory
|
||||
import org.springframework.web.client.RestTemplate
|
||||
@ -39,11 +38,11 @@ class MyRestTemplateCustomizer : RestTemplateCustomizer {
|
||||
internal class CustomRoutePlanner(proxy: HttpHost?) : DefaultProxyRoutePlanner(proxy) {
|
||||
|
||||
@Throws(HttpException::class)
|
||||
public override fun determineProxy(target: HttpHost, request: HttpRequest, context: HttpContext): HttpHost? {
|
||||
public override fun determineProxy(target: HttpHost, context: HttpContext): HttpHost? {
|
||||
if (target.hostName == "192.168.0.5") {
|
||||
return null
|
||||
}
|
||||
return super.determineProxy(target, request, context)
|
||||
return super.determineProxy(target, context)
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -33,11 +33,11 @@ import java.util.concurrent.atomic.AtomicReference;
|
||||
import jakarta.servlet.ServletContextEvent;
|
||||
import jakarta.servlet.ServletContextListener;
|
||||
import jakarta.servlet.ServletRegistration.Dynamic;
|
||||
import org.apache.http.Header;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.conn.HttpHostConnectException;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.hc.client5.http.HttpHostConnectException;
|
||||
import org.apache.hc.client5.http.classic.HttpClient;
|
||||
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||
import org.apache.hc.core5.http.Header;
|
||||
import org.apache.hc.core5.http.HttpResponse;
|
||||
import org.apache.jasper.servlet.JspServlet;
|
||||
import org.awaitility.Awaitility;
|
||||
import org.eclipse.jetty.server.Connector;
|
||||
@ -319,7 +319,7 @@ class JettyServletWebServerFactoryTests extends AbstractServletWebServerFactoryT
|
||||
blockingServlet.admitOne();
|
||||
Object response = request.get();
|
||||
assertThat(response).isInstanceOf(HttpResponse.class);
|
||||
assertThat(((HttpResponse) response).getStatusLine().getStatusCode()).isEqualTo(200);
|
||||
assertThat(((HttpResponse) response).getCode()).isEqualTo(200);
|
||||
assertThat(((HttpResponse) response).getFirstHeader("Connection")).isNull();
|
||||
this.webServer.shutDownGracefully((result) -> {
|
||||
});
|
||||
@ -328,7 +328,7 @@ class JettyServletWebServerFactoryTests extends AbstractServletWebServerFactoryT
|
||||
blockingServlet.admitOne();
|
||||
response = request.get();
|
||||
assertThat(response).isInstanceOf(HttpResponse.class);
|
||||
assertThat(((HttpResponse) response).getStatusLine().getStatusCode()).isEqualTo(200);
|
||||
assertThat(((HttpResponse) response).getCode()).isEqualTo(200);
|
||||
assertThat(((HttpResponse) response).getFirstHeader("Connection")).isNotNull().extracting(Header::getValue)
|
||||
.isEqualTo("close");
|
||||
this.webServer.stop();
|
||||
|
@ -57,11 +57,11 @@ import org.apache.catalina.util.CharsetMapper;
|
||||
import org.apache.catalina.valves.RemoteIpValve;
|
||||
import org.apache.coyote.ProtocolHandler;
|
||||
import org.apache.coyote.http11.AbstractHttp11Protocol;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.NoHttpResponseException;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.conn.HttpHostConnectException;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.hc.client5.http.HttpHostConnectException;
|
||||
import org.apache.hc.client5.http.classic.HttpClient;
|
||||
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||
import org.apache.hc.core5.http.HttpResponse;
|
||||
import org.apache.hc.core5.http.NoHttpResponseException;
|
||||
import org.apache.jasper.servlet.JspServlet;
|
||||
import org.apache.tomcat.JarScanFilter;
|
||||
import org.apache.tomcat.JarScanType;
|
||||
|
@ -36,7 +36,7 @@ import io.undertow.Undertow.Builder;
|
||||
import io.undertow.servlet.api.DeploymentInfo;
|
||||
import io.undertow.servlet.api.ServletContainer;
|
||||
import jakarta.servlet.ServletRegistration.Dynamic;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.hc.core5.http.HttpResponse;
|
||||
import org.apache.jasper.servlet.JspServlet;
|
||||
import org.awaitility.Awaitility;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
@ -207,8 +207,7 @@ class UndertowServletWebServerFactoryTests extends AbstractServletWebServerFacto
|
||||
assertThat(request.get()).isInstanceOf(HttpResponse.class);
|
||||
Object rejectedResult = initiateGetRequest(port, "/").get();
|
||||
assertThat(rejectedResult).isInstanceOf(HttpResponse.class);
|
||||
assertThat(((HttpResponse) rejectedResult).getStatusLine().getStatusCode())
|
||||
.isEqualTo(HttpStatus.SERVICE_UNAVAILABLE.value());
|
||||
assertThat(((HttpResponse) rejectedResult).getCode()).isEqualTo(HttpStatus.SERVICE_UNAVAILABLE.value());
|
||||
this.webServer.stop();
|
||||
}
|
||||
|
||||
|
@ -37,10 +37,10 @@ import java.security.cert.X509Certificate;
|
||||
import java.time.Duration;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Date;
|
||||
import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Map;
|
||||
@ -51,6 +51,7 @@ import java.util.concurrent.Callable;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.FutureTask;
|
||||
import java.util.concurrent.RunnableFuture;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
import java.util.function.Supplier;
|
||||
@ -78,20 +79,23 @@ import jakarta.servlet.http.HttpServletRequest;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.servlet.http.HttpSession;
|
||||
import org.apache.catalina.webresources.TomcatURLStreamHandlerFactory;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.client.HttpClient;
|
||||
import org.apache.http.client.entity.InputStreamFactory;
|
||||
import org.apache.http.client.methods.HttpGet;
|
||||
import org.apache.http.client.protocol.HttpClientContext;
|
||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||
import org.apache.http.conn.ssl.TrustSelfSignedStrategy;
|
||||
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
|
||||
import org.apache.http.protocol.HttpContext;
|
||||
import org.apache.http.ssl.SSLContextBuilder;
|
||||
import org.apache.http.ssl.TrustStrategy;
|
||||
import org.apache.hc.client5.http.classic.HttpClient;
|
||||
import org.apache.hc.client5.http.classic.methods.HttpGet;
|
||||
import org.apache.hc.client5.http.entity.InputStreamFactory;
|
||||
import org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy;
|
||||
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.SSLConnectionSocketFactory;
|
||||
import org.apache.hc.client5.http.ssl.TrustSelfSignedStrategy;
|
||||
import org.apache.hc.core5.http.HttpResponse;
|
||||
import org.apache.hc.core5.http.io.HttpClientResponseHandler;
|
||||
import org.apache.hc.core5.http.protocol.HttpContext;
|
||||
import org.apache.hc.core5.ssl.SSLContextBuilder;
|
||||
import org.apache.hc.core5.ssl.TrustStrategy;
|
||||
import org.apache.hc.core5.util.TimeValue;
|
||||
import org.apache.jasper.EmbeddedServletOptions;
|
||||
import org.apache.jasper.servlet.JspServlet;
|
||||
import org.assertj.core.api.ThrowableAssert.ThrowingCallable;
|
||||
@ -178,23 +182,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
private final HttpClientContext httpClientContext = HttpClientContext.create();
|
||||
|
||||
private final Supplier<HttpClientBuilder> httpClientBuilder = () -> HttpClients.custom()
|
||||
.setRetryHandler(new StandardHttpRequestRetryHandler(10, false) {
|
||||
|
||||
@Override
|
||||
public boolean retryRequest(IOException exception, int executionCount, HttpContext context) {
|
||||
boolean retry = super.retryRequest(exception, executionCount, context);
|
||||
if (retry) {
|
||||
try {
|
||||
Thread.sleep(200);
|
||||
}
|
||||
catch (InterruptedException ex) {
|
||||
Thread.currentThread().interrupt();
|
||||
}
|
||||
}
|
||||
return retry;
|
||||
}
|
||||
|
||||
});
|
||||
.setRetryStrategy(new DefaultHttpRequestRetryStrategy(10, TimeValue.of(200, TimeUnit.MILLISECONDS)));
|
||||
|
||||
@AfterEach
|
||||
void tearDown() {
|
||||
@ -446,8 +434,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build());
|
||||
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThatExceptionOfType(SSLException.class)
|
||||
.isThrownBy(() -> getResponse(getLocalUrl("https", "/hello"), requestFactory));
|
||||
}
|
||||
@ -460,8 +447,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build());
|
||||
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/hello"), requestFactory)).contains("scheme=https");
|
||||
}
|
||||
|
||||
@ -476,8 +462,9 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
TrustStrategy trustStrategy = new SerialNumberValidatingTrustSelfSignedStrategy("3a3aaec8");
|
||||
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, trustStrategy).build();
|
||||
HttpClient httpClient = HttpClients.custom().setSSLSocketFactory(new SSLConnectionSocketFactory(sslContext))
|
||||
.build();
|
||||
PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
||||
.setSSLSocketFactory(new SSLConnectionSocketFactory(sslContext)).build();
|
||||
HttpClient httpClient = HttpClients.custom().setConnectionManager(connectionManager).build();
|
||||
String response = getResponse(getLocalUrl("https", "/hello"),
|
||||
new HttpComponentsClientHttpRequestFactory(httpClient));
|
||||
assertThat(response).contains("scheme=https");
|
||||
@ -506,7 +493,9 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
||||
.setSSLSocketFactory(socketFactory).build();
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setConnectionManager(connectionManager).build();
|
||||
ClientHttpResponse response = getClientResponse(getLocalUrl("https", "/hello"), HttpMethod.GET,
|
||||
new HttpComponentsClientHttpRequestFactory(httpClient));
|
||||
assertThat(response.getHeaders().get("Server")).isNullOrEmpty();
|
||||
@ -521,8 +510,9 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory)
|
||||
.setRetryHandler(new DefaultHttpRequestRetryHandler(10, false)).build();
|
||||
PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
||||
.setSSLSocketFactory(socketFactory).build();
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setConnectionManager(connectionManager).build();
|
||||
ClientHttpResponse response = getClientResponse(getLocalUrl("https", "/hello"), HttpMethod.GET,
|
||||
new HttpComponentsClientHttpRequestFactory(httpClient));
|
||||
assertThat(response.getHeaders().get("Server")).containsExactly("MyServer");
|
||||
@ -536,8 +526,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test");
|
||||
}
|
||||
|
||||
@ -553,8 +542,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
|
||||
.loadKeyMaterial(keyStore, "secret".toCharArray()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test");
|
||||
}
|
||||
|
||||
@ -570,8 +558,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
|
||||
.loadKeyMaterial(keyStore, "secret".toCharArray()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test");
|
||||
}
|
||||
|
||||
@ -588,8 +575,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
|
||||
.loadKeyMaterial(keyStore, "password".toCharArray()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test");
|
||||
}
|
||||
|
||||
@ -602,8 +588,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
String localUrl = getLocalUrl("https", "/test.txt");
|
||||
assertThatIOException().isThrownBy(() -> getResponse(localUrl, requestFactory));
|
||||
}
|
||||
@ -621,8 +606,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
|
||||
.loadKeyMaterial(keyStore, "password".toCharArray()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test");
|
||||
}
|
||||
|
||||
@ -635,8 +619,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test");
|
||||
}
|
||||
|
||||
@ -659,8 +642,7 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy())
|
||||
.loadKeyMaterial(keyStore, "password".toCharArray()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/test.txt"), requestFactory)).isEqualTo("test");
|
||||
then(sslStoreProvider).should(atLeastOnce()).getKeyStore();
|
||||
then(sslStoreProvider).should(atLeastOnce()).getTrustStore();
|
||||
@ -742,11 +724,19 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer.start();
|
||||
SSLConnectionSocketFactory socketFactory = new SSLConnectionSocketFactory(
|
||||
new SSLContextBuilder().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build());
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setSSLSocketFactory(socketFactory).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = createHttpComponentsRequestFactory(socketFactory);
|
||||
assertThat(getResponse(getLocalUrl("https", "/hello"), requestFactory)).contains("scheme=https");
|
||||
}
|
||||
|
||||
private HttpComponentsClientHttpRequestFactory createHttpComponentsRequestFactory(
|
||||
SSLConnectionSocketFactory socketFactory) {
|
||||
PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
|
||||
.setSSLSocketFactory(socketFactory).build();
|
||||
HttpClient httpClient = this.httpClientBuilder.get().setConnectionManager(connectionManager).build();
|
||||
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||||
return requestFactory;
|
||||
}
|
||||
|
||||
private String getStoreType(String keyStore) {
|
||||
return keyStore.endsWith(".p12") ? "pkcs12" : null;
|
||||
}
|
||||
@ -938,7 +928,8 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
this.webServer = factory.getWebServer(new ServletRegistrationBean<>(new ExampleServlet(false, true), "/hello"));
|
||||
this.webServer.start();
|
||||
TestGzipInputStreamFactory inputStreamFactory = new TestGzipInputStreamFactory();
|
||||
Map<String, InputStreamFactory> contentDecoderMap = Collections.singletonMap("gzip", inputStreamFactory);
|
||||
LinkedHashMap<String, InputStreamFactory> contentDecoderMap = new LinkedHashMap<>();
|
||||
contentDecoderMap.put("gzip", inputStreamFactory);
|
||||
getResponse(getLocalUrl("/hello"), new HttpComponentsClientHttpRequestFactory(
|
||||
this.httpClientBuilder.get().setContentDecoderRegistry(contentDecoderMap).build()));
|
||||
assertThat(inputStreamFactory.wasCompressionUsed()).isTrue();
|
||||
@ -1267,9 +1258,11 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
protected Future<Object> initiateGetRequest(HttpClient httpClient, int port, String path) {
|
||||
RunnableFuture<Object> getRequest = new FutureTask<>(() -> {
|
||||
try {
|
||||
HttpResponse response = httpClient.execute(new HttpGet("http://localhost:" + port + path));
|
||||
response.getEntity().getContent().close();
|
||||
return response;
|
||||
return httpClient.execute(new HttpGet("http://localhost:" + port + path),
|
||||
(HttpClientResponseHandler<HttpResponse>) (response) -> {
|
||||
response.getEntity().getContent().close();
|
||||
return response;
|
||||
});
|
||||
}
|
||||
catch (Exception ex) {
|
||||
return ex;
|
||||
@ -1306,7 +1299,8 @@ public abstract class AbstractServletWebServerFactoryTests {
|
||||
HttpMethod method) throws Exception {
|
||||
String testContent = setUpFactoryForCompression(contentSize, mimeTypes, excludedUserAgents);
|
||||
TestGzipInputStreamFactory inputStreamFactory = new TestGzipInputStreamFactory();
|
||||
Map<String, InputStreamFactory> contentDecoderMap = Collections.singletonMap("gzip", inputStreamFactory);
|
||||
LinkedHashMap<String, InputStreamFactory> contentDecoderMap = new LinkedHashMap<>();
|
||||
contentDecoderMap.put("gzip", inputStreamFactory);
|
||||
String response = getResponse(getLocalUrl("/test.txt"), method,
|
||||
new HttpComponentsClientHttpRequestFactory(HttpClientBuilder.create().setUserAgent("testUserAgent")
|
||||
.setContentDecoderRegistry(contentDecoderMap).build()));
|
||||
|
@ -36,7 +36,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
@ClassPathExclusions("httpclient-*.jar")
|
||||
@ClassPathExclusions("httpclient5-*.jar")
|
||||
class HttpWebServiceMessageSenderBuilderOkHttp3IntegrationTests {
|
||||
|
||||
private final HttpWebServiceMessageSenderBuilder builder = new HttpWebServiceMessageSenderBuilder();
|
||||
|
@ -34,7 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
*
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
@ClassPathExclusions({ "httpclient-*.jar", "okhttp*.jar" })
|
||||
@ClassPathExclusions({ "httpclient5-*.jar", "okhttp*.jar" })
|
||||
class HttpWebServiceMessageSenderBuilderSimpleIntegrationTests {
|
||||
|
||||
private final HttpWebServiceMessageSenderBuilder builder = new HttpWebServiceMessageSenderBuilder();
|
||||
|
@ -18,13 +18,11 @@ package org.springframework.boot.webservices.client;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||
import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
||||
import org.springframework.test.util.ReflectionTestUtils;
|
||||
import org.springframework.ws.transport.WebServiceMessageSender;
|
||||
import org.springframework.ws.transport.http.ClientHttpRequestMessageSender;
|
||||
|
||||
@ -59,14 +57,10 @@ class HttpWebServiceMessageSenderBuilderTests {
|
||||
|
||||
@Test
|
||||
void buildUsesHttpComponentsByDefault() {
|
||||
ClientHttpRequestMessageSender messageSender = build(new HttpWebServiceMessageSenderBuilder()
|
||||
.setConnectTimeout(Duration.ofSeconds(5)).setReadTimeout(Duration.ofSeconds(2)));
|
||||
ClientHttpRequestMessageSender messageSender = build(
|
||||
new HttpWebServiceMessageSenderBuilder().setConnectTimeout(Duration.ofSeconds(5)));
|
||||
ClientHttpRequestFactory requestFactory = messageSender.getRequestFactory();
|
||||
assertThat(requestFactory).isInstanceOf(HttpComponentsClientHttpRequestFactory.class);
|
||||
RequestConfig requestConfig = (RequestConfig) ReflectionTestUtils.getField(requestFactory, "requestConfig");
|
||||
assertThat(requestConfig).isNotNull();
|
||||
assertThat(requestConfig.getConnectTimeout()).isEqualTo(5000);
|
||||
assertThat(requestConfig.getSocketTimeout()).isEqualTo(2000);
|
||||
}
|
||||
|
||||
private ClientHttpRequestMessageSender build(HttpWebServiceMessageSenderBuilder builder) {
|
||||
|
@ -18,10 +18,12 @@ package org.springframework.boot.deployment;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.Duration;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
|
||||
import org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy;
|
||||
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||
import org.apache.hc.core5.util.TimeValue;
|
||||
import org.awaitility.Awaitility;
|
||||
import org.awaitility.core.ConditionTimeoutException;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@ -96,7 +98,9 @@ abstract class AbstractDeploymentTests {
|
||||
.rootUri("http://" + this.container.getHost() + ":" + this.container.getMappedPort(this.port)
|
||||
+ "/spring-boot")
|
||||
.requestFactory(() -> new HttpComponentsClientHttpRequestFactory(HttpClients.custom()
|
||||
.setRetryHandler(new StandardHttpRequestRetryHandler(10, false)).build())));
|
||||
.setRetryStrategy(
|
||||
new DefaultHttpRequestRetryStrategy(10, TimeValue.of(1, TimeUnit.SECONDS)))
|
||||
.build())));
|
||||
try {
|
||||
Awaitility.await().atMost(Duration.ofMinutes(10)).until(() -> {
|
||||
try {
|
||||
|
@ -28,10 +28,12 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.UUID;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.apache.http.impl.client.HttpClients;
|
||||
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
|
||||
import org.apache.hc.client5.http.impl.DefaultHttpRequestRetryStrategy;
|
||||
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||
import org.apache.hc.core5.util.TimeValue;
|
||||
import org.junit.jupiter.api.extension.AfterAllCallback;
|
||||
import org.junit.jupiter.api.extension.Extension;
|
||||
import org.junit.jupiter.api.extension.ExtensionContext;
|
||||
@ -178,8 +180,9 @@ class EmbeddedServerContainerInvocationContextProvider
|
||||
|
||||
@Override
|
||||
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext) {
|
||||
RestTemplate rest = new RestTemplate(new HttpComponentsClientHttpRequestFactory(
|
||||
HttpClients.custom().setRetryHandler(new StandardHttpRequestRetryHandler(10, false)).build()));
|
||||
RestTemplate rest = new RestTemplate(new HttpComponentsClientHttpRequestFactory(HttpClients.custom()
|
||||
.setRetryStrategy(new DefaultHttpRequestRetryStrategy(10, TimeValue.of(1, TimeUnit.SECONDS)))
|
||||
.build()));
|
||||
rest.setErrorHandler(new ResponseErrorHandler() {
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user