You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2017/01/07 11:38:46 UTC
svn commit: r1777768 - in /httpcomponents/httpclient/trunk:
httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/
httpclient5-win/src/examples/org/apache/hc/client5/http/examples/client/win/
httpclient5/src/examples/org/apache/hc/clien...
Author: olegk
Date: Sat Jan 7 11:38:46 2017
New Revision: 1777768
URL: http://svn.apache.org/viewvc?rev=1777768&view=rev
Log:
Moved connection pool construction logic out of HttpClientBuilder into a separate builder class
Added:
httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManagerBuilder.java (with props)
Modified:
httpcomponents/httpclient/trunk/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestStaleWhileRevalidationReleasesConnection.java
httpcomponents/httpclient/trunk/httpclient5-win/src/examples/org/apache/hc/client5/http/examples/client/win/ClientWinAuth.java
httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomPublicSuffixList.java
httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomSSL.java
httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientWithRequestFuture.java
httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/sync/HttpClientBuilder.java
httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/impl/sync/TestFutureRequestExecutionService.java
httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/localserver/LocalServerTestBase.java
Modified: httpcomponents/httpclient/trunk/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestStaleWhileRevalidationReleasesConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestStaleWhileRevalidationReleasesConnection.java?rev=1777768&r1=1777767&r2=1777768&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestStaleWhileRevalidationReleasesConnection.java (original)
+++ httpcomponents/httpclient/trunk/httpclient5-cache/src/test/java/org/apache/hc/client5/http/impl/cache/TestStaleWhileRevalidationReleasesConnection.java Sat Jan 7 11:38:46 2017
@@ -36,8 +36,8 @@ import java.util.Locale;
import org.apache.hc.client5.http.cache.CacheResponseStatus;
import org.apache.hc.client5.http.cache.HttpCacheContext;
import org.apache.hc.client5.http.config.RequestConfig;
+import org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager;
import org.apache.hc.client5.http.impl.sync.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.sync.HttpClientBuilder;
import org.apache.hc.client5.http.methods.HttpGet;
import org.apache.hc.client5.http.protocol.ClientProtocolException;
import org.apache.hc.core5.http.ClassicHttpRequest;
@@ -96,20 +96,17 @@ public class TestStaleWhileRevalidationR
.setSharedCache(true)
.build();
- final HttpClientBuilder clientBuilder = CachingHttpClientBuilder.create().setCacheConfig(cacheConfig);
- clientBuilder.setMaxConnTotal(1);
- clientBuilder.setMaxConnPerRoute(1);
-
final RequestConfig config = RequestConfig.custom()
.setSocketTimeout(10000)
.setConnectTimeout(10000)
.setConnectionRequestTimeout(1000)
.build();
- clientBuilder.setDefaultRequestConfig(config);
-
-
- client = clientBuilder.build();
+ client = CachingHttpClientBuilder.create()
+ .setCacheConfig(cacheConfig)
+ .setDefaultRequestConfig(config)
+ .setConnectionManager(new BasicHttpClientConnectionManager())
+ .build();
}
@After
Modified: httpcomponents/httpclient/trunk/httpclient5-win/src/examples/org/apache/hc/client5/http/examples/client/win/ClientWinAuth.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5-win/src/examples/org/apache/hc/client5/http/examples/client/win/ClientWinAuth.java?rev=1777768&r1=1777767&r2=1777768&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5-win/src/examples/org/apache/hc/client5/http/examples/client/win/ClientWinAuth.java (original)
+++ httpcomponents/httpclient/trunk/httpclient5-win/src/examples/org/apache/hc/client5/http/examples/client/win/ClientWinAuth.java Sat Jan 7 11:38:46 2017
@@ -28,8 +28,8 @@
package org.apache.hc.client5.http.examples.client.win;
import org.apache.hc.client5.http.impl.sync.CloseableHttpClient;
+import org.apache.hc.client5.http.impl.sync.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.win.WinHttpClients;
-import org.apache.hc.client5.http.methods.CloseableHttpResponse;
import org.apache.hc.client5.http.methods.HttpGet;
import org.apache.hc.core5.http.io.entity.EntityUtils;
Modified: httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomPublicSuffixList.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomPublicSuffixList.java?rev=1777768&r1=1777767&r2=1777768&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomPublicSuffixList.java (original)
+++ httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomPublicSuffixList.java Sat Jan 7 11:38:46 2017
@@ -31,16 +31,20 @@ import java.net.URL;
import org.apache.hc.client5.http.config.CookieSpecs;
import org.apache.hc.client5.http.cookie.CookieSpecProvider;
import org.apache.hc.client5.http.impl.cookie.RFC6265CookieSpecProvider;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.impl.sync.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.sync.HttpClients;
import org.apache.hc.client5.http.impl.sync.CloseableHttpResponse;
+import org.apache.hc.client5.http.impl.sync.HttpClients;
+import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.methods.HttpGet;
import org.apache.hc.client5.http.psl.PublicSuffixMatcher;
import org.apache.hc.client5.http.psl.PublicSuffixMatcherLoader;
import org.apache.hc.client5.http.ssl.DefaultHostnameVerifier;
+import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.core5.http.config.Lookup;
import org.apache.hc.core5.http.config.RegistryBuilder;
import org.apache.hc.core5.http.io.entity.EntityUtils;
+import org.apache.hc.core5.ssl.SSLContexts;
/**
* This example demonstrates how to use a custom public suffix list.
@@ -57,17 +61,20 @@ public class ClientCustomPublicSuffixLis
// Please use the publicsuffix.org URL to download the list no more than once per day !!!
// Please consider making a local copy !!!
- DefaultHostnameVerifier hostnameVerifier = new DefaultHostnameVerifier(publicSuffixMatcher);
-
RFC6265CookieSpecProvider cookieSpecProvider = new RFC6265CookieSpecProvider(publicSuffixMatcher);
Lookup<CookieSpecProvider> cookieSpecRegistry = RegistryBuilder.<CookieSpecProvider>create()
.register(CookieSpecs.DEFAULT, cookieSpecProvider)
.register(CookieSpecs.STANDARD, cookieSpecProvider)
.register(CookieSpecs.STANDARD_STRICT, cookieSpecProvider)
.build();
-
+ SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
+ SSLContexts.createDefault(),
+ new DefaultHostnameVerifier(publicSuffixMatcher));
+ HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
+ .setSSLSocketFactory(sslsf)
+ .build();
try (CloseableHttpClient httpclient = HttpClients.custom()
- .setSSLHostnameVerifier(hostnameVerifier)
+ .setConnectionManager(cm)
.setDefaultCookieSpecRegistry(cookieSpecRegistry)
.build()) {
Modified: httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomSSL.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomSSL.java?rev=1777768&r1=1777767&r2=1777768&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomSSL.java (original)
+++ httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientCustomSSL.java Sat Jan 7 11:38:46 2017
@@ -30,9 +30,11 @@ import java.io.File;
import javax.net.ssl.SSLContext;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.impl.sync.CloseableHttpClient;
-import org.apache.hc.client5.http.impl.sync.HttpClients;
import org.apache.hc.client5.http.impl.sync.CloseableHttpResponse;
+import org.apache.hc.client5.http.impl.sync.HttpClients;
+import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.methods.HttpGet;
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.client5.http.ssl.TrustSelfSignedStrategy;
@@ -51,14 +53,17 @@ public class ClientCustomSSL {
.loadTrustMaterial(new File("my.keystore"), "nopassword".toCharArray(),
new TrustSelfSignedStrategy())
.build();
- // Allow TLSv1 protocol only
+ // Allow TLSv1.2 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
- new String[] { "TLSv1" },
+ new String[] { "TLSv1.2" },
null,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
- try (CloseableHttpClient httpclient = HttpClients.custom()
+ HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
.setSSLSocketFactory(sslsf)
+ .build();
+ try (CloseableHttpClient httpclient = HttpClients.custom()
+ .setConnectionManager(cm)
.build()) {
HttpGet httpget = new HttpGet("https://httpbin.org/");
Modified: httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientWithRequestFuture.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientWithRequestFuture.java?rev=1777768&r1=1777767&r2=1777768&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientWithRequestFuture.java (original)
+++ httpcomponents/httpclient/trunk/httpclient5/src/examples/org/apache/hc/client5/http/examples/ClientWithRequestFuture.java Sat Jan 7 11:38:46 2017
@@ -32,10 +32,12 @@ import java.util.concurrent.ExecutorServ
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.impl.sync.CloseableHttpClient;
import org.apache.hc.client5.http.impl.sync.FutureRequestExecutionService;
import org.apache.hc.client5.http.impl.sync.HttpClientBuilder;
import org.apache.hc.client5.http.impl.sync.HttpRequestFutureTask;
+import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.methods.HttpGet;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.concurrent.FutureCallback;
@@ -47,9 +49,13 @@ public class ClientWithRequestFuture {
public static void main(String[] args) throws Exception {
// the simplest way to create a HttpAsyncClientWithFuture
- CloseableHttpClient httpclient = HttpClientBuilder.create()
+ HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
.setMaxConnPerRoute(5)
- .setMaxConnTotal(5).build();
+ .setMaxConnTotal(5)
+ .build();
+ CloseableHttpClient httpclient = HttpClientBuilder.create()
+ .setConnectionManager(cm)
+ .build();
ExecutorService execService = Executors.newFixedThreadPool(5);
try (FutureRequestExecutionService requestExecService = new FutureRequestExecutionService(
httpclient, execService)) {
Added: httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManagerBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManagerBuilder.java?rev=1777768&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManagerBuilder.java (added)
+++ httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManagerBuilder.java Sat Jan 7 11:38:46 2017
@@ -0,0 +1,211 @@
+/*
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.hc.client5.http.impl.io;
+
+import java.util.concurrent.TimeUnit;
+
+import org.apache.hc.client5.http.DnsResolver;
+import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
+import org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory;
+import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
+import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
+import org.apache.hc.core5.http.config.ConnectionConfig;
+import org.apache.hc.core5.http.config.RegistryBuilder;
+import org.apache.hc.core5.http.config.SocketConfig;
+import org.apache.hc.core5.util.TextUtils;
+
+/**
+ * Builder for {@link PoolingHttpClientConnectionManager} instances.
+ * <p>
+ * When a particular component is not explicitly set this class will
+ * use its default implementation. System properties will be taken
+ * into account when configuring the default implementations when
+ * {@link #useSystemProperties()} method is called prior to calling
+ * {@link #build()}.
+ * </p>
+ * <ul>
+ * <li>ssl.TrustManagerFactory.algorithm</li>
+ * <li>javax.net.ssl.trustStoreType</li>
+ * <li>javax.net.ssl.trustStore</li>
+ * <li>javax.net.ssl.trustStoreProvider</li>
+ * <li>javax.net.ssl.trustStorePassword</li>
+ * <li>ssl.KeyManagerFactory.algorithm</li>
+ * <li>javax.net.ssl.keyStoreType</li>
+ * <li>javax.net.ssl.keyStore</li>
+ * <li>javax.net.ssl.keyStoreProvider</li>
+ * <li>javax.net.ssl.keyStorePassword</li>
+ * <li>https.protocols</li>
+ * <li>https.cipherSuites</li>
+ * </ul>
+ *
+ * @since 5.0
+ */
+public class PoolingHttpClientConnectionManagerBuilder {
+
+ private LayeredConnectionSocketFactory sslSocketFactory;
+ private DnsResolver dnsResolver;
+
+ private SocketConfig defaultSocketConfig;
+ private ConnectionConfig defaultConnectionConfig;
+
+ private boolean systemProperties;
+
+ private int maxConnTotal = 0;
+ private int maxConnPerRoute = 0;
+
+ private long connTimeToLive = -1;
+ private TimeUnit connTimeToLiveTimeUnit = TimeUnit.MILLISECONDS;
+ private int validateAfterInactivity = 2000;
+
+ public static PoolingHttpClientConnectionManagerBuilder create() {
+ return new PoolingHttpClientConnectionManagerBuilder();
+ }
+
+ PoolingHttpClientConnectionManagerBuilder() {
+ super();
+ }
+
+ /**
+ * Assigns {@link LayeredConnectionSocketFactory} instance for SSL connections.
+ */
+ public final PoolingHttpClientConnectionManagerBuilder setSSLSocketFactory(
+ final LayeredConnectionSocketFactory sslSocketFactory) {
+ this.sslSocketFactory = sslSocketFactory;
+ return this;
+ }
+
+ /**
+ * Assigns maximum total connection value.
+ */
+ public final PoolingHttpClientConnectionManagerBuilder setMaxConnTotal(final int maxConnTotal) {
+ this.maxConnTotal = maxConnTotal;
+ return this;
+ }
+
+ /**
+ * Assigns maximum connection per route value.
+ */
+ public final PoolingHttpClientConnectionManagerBuilder setMaxConnPerRoute(final int maxConnPerRoute) {
+ this.maxConnPerRoute = maxConnPerRoute;
+ return this;
+ }
+
+ /**
+ * Assigns default {@link SocketConfig}.
+ */
+ public final PoolingHttpClientConnectionManagerBuilder setDefaultSocketConfig(final SocketConfig config) {
+ this.defaultSocketConfig = config;
+ return this;
+ }
+
+ /**
+ * Assigns default {@link ConnectionConfig}.
+ */
+ public final PoolingHttpClientConnectionManagerBuilder setDefaultConnectionConfig(final ConnectionConfig config) {
+ this.defaultConnectionConfig = config;
+ return this;
+ }
+
+ /**
+ * Sets maximum time to live for persistent connections
+ *
+ * @since 4.4
+ */
+ public final PoolingHttpClientConnectionManagerBuilder setConnectionTimeToLive(final long connTimeToLive, final TimeUnit connTimeToLiveTimeUnit) {
+ this.connTimeToLive = connTimeToLive;
+ this.connTimeToLiveTimeUnit = connTimeToLiveTimeUnit;
+ return this;
+ }
+
+ /**
+ * Sets period after inactivity in milliseconds after which persistent
+ * connections must be checked to ensure they are still valid.
+ *
+ * @see org.apache.hc.core5.http.io.HttpClientConnection#isStale()
+ */
+ public final PoolingHttpClientConnectionManagerBuilder setValidateAfterInactivity(final int validateAfterInactivity) {
+ this.validateAfterInactivity = validateAfterInactivity;
+ return this;
+ }
+
+ /**
+ * Assigns {@link DnsResolver} instance.
+ */
+ public final PoolingHttpClientConnectionManagerBuilder setDnsResolver(final DnsResolver dnsResolver) {
+ this.dnsResolver = dnsResolver;
+ return this;
+ }
+
+ /**
+ * Use system properties when creating and configuring default
+ * implementations.
+ */
+ public final PoolingHttpClientConnectionManagerBuilder useSystemProperties() {
+ this.systemProperties = true;
+ return this;
+ }
+
+ private static String[] split(final String s) {
+ if (TextUtils.isBlank(s)) {
+ return null;
+ }
+ return s.split(" *, *");
+ }
+
+ public PoolingHttpClientConnectionManager build() {
+ @SuppressWarnings("resource")
+ final PoolingHttpClientConnectionManager poolingmgr = new PoolingHttpClientConnectionManager(
+ RegistryBuilder.<ConnectionSocketFactory>create()
+ .register("http", PlainConnectionSocketFactory.getSocketFactory())
+ .register("https", sslSocketFactory != null ? sslSocketFactory :
+ (systemProperties ?
+ SSLConnectionSocketFactory.getSystemSocketFactory() :
+ SSLConnectionSocketFactory.getSocketFactory()))
+ .build(),
+ null,
+ null,
+ dnsResolver,
+ connTimeToLive,
+ connTimeToLiveTimeUnit != null ? connTimeToLiveTimeUnit : TimeUnit.MILLISECONDS);
+ poolingmgr.setValidateAfterInactivity(this.validateAfterInactivity);
+ if (defaultSocketConfig != null) {
+ poolingmgr.setDefaultSocketConfig(defaultSocketConfig);
+ }
+ if (defaultConnectionConfig != null) {
+ poolingmgr.setDefaultConnectionConfig(defaultConnectionConfig);
+ }
+ if (maxConnTotal > 0) {
+ poolingmgr.setMaxTotal(maxConnTotal);
+ }
+ if (maxConnPerRoute > 0) {
+ poolingmgr.setDefaultMaxPerRoute(maxConnPerRoute);
+ }
+ return poolingmgr;
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManagerBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManagerBuilder.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/io/PoolingHttpClientConnectionManagerBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/sync/HttpClientBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/sync/HttpClientBuilder.java?rev=1777768&r1=1777767&r2=1777768&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/sync/HttpClientBuilder.java (original)
+++ httpcomponents/httpclient/trunk/httpclient5/src/main/java/org/apache/hc/client5/http/impl/sync/HttpClientBuilder.java Sat Jan 7 11:38:46 2017
@@ -38,12 +38,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
-import javax.net.ssl.HostnameVerifier;
-import javax.net.ssl.SSLContext;
-import javax.net.ssl.SSLSocketFactory;
-
import org.apache.hc.client5.http.ConnectionKeepAliveStrategy;
-import org.apache.hc.client5.http.DnsResolver;
import org.apache.hc.client5.http.SchemePortResolver;
import org.apache.hc.client5.http.SystemDefaultDnsResolver;
import org.apache.hc.client5.http.auth.AuthSchemeProvider;
@@ -62,7 +57,7 @@ import org.apache.hc.client5.http.impl.a
import org.apache.hc.client5.http.impl.auth.NTLMSchemeFactory;
import org.apache.hc.client5.http.impl.auth.SPNegoSchemeFactory;
import org.apache.hc.client5.http.impl.auth.SystemDefaultCredentialsProvider;
-import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
import org.apache.hc.client5.http.impl.protocol.DefaultAuthenticationStrategy;
import org.apache.hc.client5.http.impl.protocol.DefaultRedirectStrategy;
import org.apache.hc.client5.http.impl.protocol.DefaultUserTokenHandler;
@@ -81,14 +76,7 @@ import org.apache.hc.client5.http.protoc
import org.apache.hc.client5.http.protocol.ResponseContentEncoding;
import org.apache.hc.client5.http.protocol.ResponseProcessCookies;
import org.apache.hc.client5.http.protocol.UserTokenHandler;
-import org.apache.hc.client5.http.psl.PublicSuffixMatcher;
-import org.apache.hc.client5.http.psl.PublicSuffixMatcherLoader;
import org.apache.hc.client5.http.routing.HttpRoutePlanner;
-import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
-import org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory;
-import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
-import org.apache.hc.client5.http.ssl.DefaultHostnameVerifier;
-import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
import org.apache.hc.client5.http.sync.BackoffManager;
import org.apache.hc.client5.http.sync.ConnectionBackoffStrategy;
import org.apache.hc.client5.http.sync.HttpRequestRetryHandler;
@@ -100,10 +88,8 @@ import org.apache.hc.core5.http.HttpRequ
import org.apache.hc.core5.http.HttpRequestInterceptor;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.HttpResponseInterceptor;
-import org.apache.hc.core5.http.config.ConnectionConfig;
import org.apache.hc.core5.http.config.Lookup;
import org.apache.hc.core5.http.config.RegistryBuilder;
-import org.apache.hc.core5.http.config.SocketConfig;
import org.apache.hc.core5.http.impl.DefaultConnectionReuseStrategy;
import org.apache.hc.core5.http.impl.io.HttpRequestExecutor;
import org.apache.hc.core5.http.protocol.DefaultHttpProcessor;
@@ -113,7 +99,6 @@ import org.apache.hc.core5.http.protocol
import org.apache.hc.core5.http.protocol.RequestContent;
import org.apache.hc.core5.http.protocol.RequestTargetHost;
import org.apache.hc.core5.http.protocol.RequestUserAgent;
-import org.apache.hc.core5.ssl.SSLContexts;
import org.apache.hc.core5.util.TextUtils;
import org.apache.hc.core5.util.VersionInfo;
@@ -127,23 +112,10 @@ import org.apache.hc.core5.util.VersionI
* {@link #build()}.
* </p>
* <ul>
- * <li>ssl.TrustManagerFactory.algorithm</li>
- * <li>javax.net.ssl.trustStoreType</li>
- * <li>javax.net.ssl.trustStore</li>
- * <li>javax.net.ssl.trustStoreProvider</li>
- * <li>javax.net.ssl.trustStorePassword</li>
- * <li>ssl.KeyManagerFactory.algorithm</li>
- * <li>javax.net.ssl.keyStoreType</li>
- * <li>javax.net.ssl.keyStore</li>
- * <li>javax.net.ssl.keyStoreProvider</li>
- * <li>javax.net.ssl.keyStorePassword</li>
- * <li>https.protocols</li>
- * <li>https.cipherSuites</li>
* <li>http.proxyHost</li>
* <li>http.proxyPort</li>
* <li>http.nonProxyHosts</li>
* <li>http.keepAlive</li>
- * <li>http.maxConnections</li>
* <li>http.agent</li>
* </ul>
* <p>
@@ -157,9 +129,6 @@ import org.apache.hc.core5.util.VersionI
public class HttpClientBuilder {
private HttpRequestExecutor requestExec;
- private HostnameVerifier hostnameVerifier;
- private LayeredConnectionSocketFactory sslSocketFactory;
- private SSLContext sslContext;
private HttpClientConnectionManager connManager;
private boolean connManagerShared;
private SchemePortResolver schemePortResolver;
@@ -168,8 +137,6 @@ public class HttpClientBuilder {
private AuthenticationStrategy targetAuthStrategy;
private AuthenticationStrategy proxyAuthStrategy;
private UserTokenHandler userTokenHandler;
- private HttpProcessor httpprocessor;
- private DnsResolver dnsResolver;
private LinkedList<HttpRequestInterceptor> requestFirst;
private LinkedList<HttpRequestInterceptor> requestLast;
@@ -190,8 +157,6 @@ public class HttpClientBuilder {
private String userAgent;
private HttpHost proxy;
private Collection<? extends Header> defaultHeaders;
- private SocketConfig defaultSocketConfig;
- private ConnectionConfig defaultConnectionConfig;
private RequestConfig defaultRequestConfig;
private boolean evictExpiredConnections;
private boolean evictIdleConnections;
@@ -206,17 +171,8 @@ public class HttpClientBuilder {
private boolean authCachingDisabled;
private boolean connectionStateDisabled;
- private int maxConnTotal = 0;
- private int maxConnPerRoute = 0;
-
- private long connTimeToLive = -1;
- private TimeUnit connTimeToLiveTimeUnit = TimeUnit.MILLISECONDS;
- private int validateAfterInactivity = 2000;
-
private List<Closeable> closeables;
- private PublicSuffixMatcher publicSuffixMatcher;
-
public static HttpClientBuilder create() {
return new HttpClientBuilder();
}
@@ -234,141 +190,6 @@ public class HttpClientBuilder {
}
/**
- * Assigns {@link javax.net.ssl.HostnameVerifier} instance.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} and the {@link #setSSLSocketFactory(
- * org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory)} methods.
- * </p>
- *
- * @since 4.4
- */
- public final HttpClientBuilder setSSLHostnameVerifier(final HostnameVerifier hostnameVerifier) {
- this.hostnameVerifier = hostnameVerifier;
- return this;
- }
-
- /**
- * Assigns file containing public suffix matcher. Instances of this class can be created
- * with {@link PublicSuffixMatcherLoader}.
- *
- * @see PublicSuffixMatcher
- * @see PublicSuffixMatcherLoader
- *
- * @since 4.4
- */
- public final HttpClientBuilder setPublicSuffixMatcher(final PublicSuffixMatcher publicSuffixMatcher) {
- this.publicSuffixMatcher = publicSuffixMatcher;
- return this;
- }
-
- /**
- * Assigns {@link SSLContext} instance.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} and the {@link #setSSLSocketFactory(
- * org.apache.hc.client5.http.socket.LayeredConnectionSocketFactory)} methods.
- * </p>
- */
- public final HttpClientBuilder setSSLContext(final SSLContext sslContext) {
- this.sslContext = sslContext;
- return this;
- }
-
- /**
- * Assigns {@link LayeredConnectionSocketFactory} instance.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} method.
- * </p>
- */
- public final HttpClientBuilder setSSLSocketFactory(
- final LayeredConnectionSocketFactory sslSocketFactory) {
- this.sslSocketFactory = sslSocketFactory;
- return this;
- }
-
- /**
- * Assigns maximum total connection value.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} method.
- * </p>
- */
- public final HttpClientBuilder setMaxConnTotal(final int maxConnTotal) {
- this.maxConnTotal = maxConnTotal;
- return this;
- }
-
- /**
- * Assigns maximum connection per route value.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} method.
- * </p>
- */
- public final HttpClientBuilder setMaxConnPerRoute(final int maxConnPerRoute) {
- this.maxConnPerRoute = maxConnPerRoute;
- return this;
- }
-
- /**
- * Assigns default {@link SocketConfig}.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} method.
- * </p>
- */
- public final HttpClientBuilder setDefaultSocketConfig(final SocketConfig config) {
- this.defaultSocketConfig = config;
- return this;
- }
-
- /**
- * Assigns default {@link ConnectionConfig}.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} method.
- * </p>
- */
- public final HttpClientBuilder setDefaultConnectionConfig(final ConnectionConfig config) {
- this.defaultConnectionConfig = config;
- return this;
- }
-
- /**
- * Sets maximum time to live for persistent connections
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} method.
- * </p>
- *
- * @since 4.4
- */
- public final HttpClientBuilder setConnectionTimeToLive(final long connTimeToLive, final TimeUnit connTimeToLiveTimeUnit) {
- this.connTimeToLive = connTimeToLive;
- this.connTimeToLiveTimeUnit = connTimeToLiveTimeUnit;
- return this;
- }
-
- /**
- * Sets period after inactivity in milliseconds after which persistent
- * connections must be checked to ensure they are still valid.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(
- *HttpClientConnectionManager)} method.
- * </p>
- *
- * @see org.apache.hc.core5.http.io.HttpClientConnection#isStale()
- *
- * @since 5.0
- */
- public final HttpClientBuilder setValidateAfterInactivity(final int validateAfterInactivity) {
- this.validateAfterInactivity = validateAfterInactivity;
- return this;
- }
-
- /**
* Assigns {@link HttpClientConnectionManager} instance.
*/
public final HttpClientBuilder setConnectionManager(
@@ -466,10 +287,6 @@ public class HttpClientBuilder {
/**
* Assigns {@code User-Agent} value.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
- * </p>
*/
public final HttpClientBuilder setUserAgent(final String userAgent) {
this.userAgent = userAgent;
@@ -478,10 +295,6 @@ public class HttpClientBuilder {
/**
* Assigns default request header values.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
- * </p>
*/
public final HttpClientBuilder setDefaultHeaders(final Collection<? extends Header> defaultHeaders) {
this.defaultHeaders = defaultHeaders;
@@ -490,10 +303,6 @@ public class HttpClientBuilder {
/**
* Adds this protocol interceptor to the head of the protocol processing list.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
- * </p>
*/
public final HttpClientBuilder addInterceptorFirst(final HttpResponseInterceptor itcp) {
if (itcp == null) {
@@ -508,10 +317,6 @@ public class HttpClientBuilder {
/**
* Adds this protocol interceptor to the tail of the protocol processing list.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
- * </p>
*/
public final HttpClientBuilder addInterceptorLast(final HttpResponseInterceptor itcp) {
if (itcp == null) {
@@ -526,9 +331,6 @@ public class HttpClientBuilder {
/**
* Adds this protocol interceptor to the head of the protocol processing list.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
*/
public final HttpClientBuilder addInterceptorFirst(final HttpRequestInterceptor itcp) {
if (itcp == null) {
@@ -543,9 +345,6 @@ public class HttpClientBuilder {
/**
* Adds this protocol interceptor to the tail of the protocol processing list.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
*/
public final HttpClientBuilder addInterceptorLast(final HttpRequestInterceptor itcp) {
if (itcp == null) {
@@ -560,9 +359,6 @@ public class HttpClientBuilder {
/**
* Disables state (cookie) management.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
*/
public final HttpClientBuilder disableCookieManagement() {
this.cookieManagementDisabled = true;
@@ -571,9 +367,6 @@ public class HttpClientBuilder {
/**
* Disables automatic content decompression.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
*/
public final HttpClientBuilder disableContentCompression() {
contentCompressionDisabled = true;
@@ -582,9 +375,6 @@ public class HttpClientBuilder {
/**
* Disables authentication scheme caching.
- * <p>
- * Please note this value can be overridden by the {@link #setHttpProcessor(
- * org.apache.hc.core5.http.protocol.HttpProcessor)} method.
*/
public final HttpClientBuilder disableAuthCaching() {
this.authCachingDisabled = true;
@@ -592,14 +382,6 @@ public class HttpClientBuilder {
}
/**
- * Assigns {@link HttpProcessor} instance.
- */
- public final HttpClientBuilder setHttpProcessor(final HttpProcessor httpprocessor) {
- this.httpprocessor = httpprocessor;
- return this;
- }
-
- /**
* Assigns {@link HttpRequestRetryHandler} instance.
* <p>
* Please note this value can be overridden by the {@link #disableAutomaticRetries()}
@@ -704,18 +486,6 @@ public class HttpClientBuilder {
}
/**
- * Assigns {@link DnsResolver} instance.
- * <p>
- * Please note this value can be overridden by the {@link #setConnectionManager(HttpClientConnectionManager)}
- * method.
- * </p>
- */
- public final HttpClientBuilder setDnsResolver(final DnsResolver dnsResolver) {
- this.dnsResolver = dnsResolver;
- return this;
- }
-
- /**
* Assigns default {@link org.apache.hc.client5.http.auth.AuthScheme} registry which will
* be used for request execution if not explicitly set in the client execution
* context.
@@ -892,76 +662,13 @@ public class HttpClientBuilder {
public CloseableHttpClient build() {
// Create main request executor
// We copy the instance fields to avoid changing them, and rename to avoid accidental use of the wrong version
- PublicSuffixMatcher publicSuffixMatcherCopy = this.publicSuffixMatcher;
- if (publicSuffixMatcherCopy == null) {
- publicSuffixMatcherCopy = PublicSuffixMatcherLoader.getDefault();
- }
-
HttpRequestExecutor requestExecCopy = this.requestExec;
if (requestExecCopy == null) {
requestExecCopy = new HttpRequestExecutor();
}
HttpClientConnectionManager connManagerCopy = this.connManager;
if (connManagerCopy == null) {
- LayeredConnectionSocketFactory sslSocketFactoryCopy = this.sslSocketFactory;
- if (sslSocketFactoryCopy == null) {
- final String[] supportedProtocols = systemProperties ? split(
- System.getProperty("https.protocols")) : null;
- final String[] supportedCipherSuites = systemProperties ? split(
- System.getProperty("https.cipherSuites")) : null;
- HostnameVerifier hostnameVerifierCopy = this.hostnameVerifier;
- if (hostnameVerifierCopy == null) {
- hostnameVerifierCopy = new DefaultHostnameVerifier(publicSuffixMatcherCopy);
- }
- if (sslContext != null) {
- sslSocketFactoryCopy = new SSLConnectionSocketFactory(
- sslContext, supportedProtocols, supportedCipherSuites, hostnameVerifierCopy);
- } else {
- if (systemProperties) {
- sslSocketFactoryCopy = new SSLConnectionSocketFactory(
- (SSLSocketFactory) SSLSocketFactory.getDefault(),
- supportedProtocols, supportedCipherSuites, hostnameVerifierCopy);
- } else {
- sslSocketFactoryCopy = new SSLConnectionSocketFactory(
- SSLContexts.createDefault(),
- hostnameVerifierCopy);
- }
- }
- }
- @SuppressWarnings("resource")
- final PoolingHttpClientConnectionManager poolingmgr = new PoolingHttpClientConnectionManager(
- RegistryBuilder.<ConnectionSocketFactory>create()
- .register("http", PlainConnectionSocketFactory.getSocketFactory())
- .register("https", sslSocketFactoryCopy)
- .build(),
- null,
- null,
- dnsResolver,
- connTimeToLive,
- connTimeToLiveTimeUnit != null ? connTimeToLiveTimeUnit : TimeUnit.MILLISECONDS);
- poolingmgr.setValidateAfterInactivity(this.validateAfterInactivity);
- if (defaultSocketConfig != null) {
- poolingmgr.setDefaultSocketConfig(defaultSocketConfig);
- }
- if (defaultConnectionConfig != null) {
- poolingmgr.setDefaultConnectionConfig(defaultConnectionConfig);
- }
- if (systemProperties) {
- String s = System.getProperty("http.keepAlive", "true");
- if ("true".equalsIgnoreCase(s)) {
- s = System.getProperty("http.maxConnections", "5");
- final int max = Integer.parseInt(s);
- poolingmgr.setDefaultMaxPerRoute(max);
- poolingmgr.setMaxTotal(2 * max);
- }
- }
- if (maxConnTotal > 0) {
- poolingmgr.setMaxTotal(maxConnTotal);
- }
- if (maxConnPerRoute > 0) {
- poolingmgr.setDefaultMaxPerRoute(maxConnPerRoute);
- }
- connManagerCopy = poolingmgr;
+ connManagerCopy = PoolingHttpClientConnectionManagerBuilder.create().build();
}
ConnectionReuseStrategy reuseStrategyCopy = this.reuseStrategy;
if (reuseStrategyCopy == null) {
@@ -1026,69 +733,64 @@ public class HttpClientBuilder {
execChain = decorateMainExec(execChain);
- HttpProcessor httpprocessorCopy = this.httpprocessor;
- if (httpprocessorCopy == null) {
-
- final HttpProcessorBuilder b = HttpProcessorBuilder.create();
- if (requestFirst != null) {
- for (final HttpRequestInterceptor i: requestFirst) {
- b.addFirst(i);
- }
- }
- if (responseFirst != null) {
- for (final HttpResponseInterceptor i: responseFirst) {
- b.addFirst(i);
- }
- }
- b.addAll(
- new RequestDefaultHeaders(defaultHeaders),
- new RequestContent(),
- new RequestTargetHost(),
- new RequestClientConnControl(),
- new RequestUserAgent(userAgentCopy),
- new RequestExpectContinue());
- if (!cookieManagementDisabled) {
- b.add(new RequestAddCookies());
- }
- if (!contentCompressionDisabled) {
- if (contentDecoderMap != null) {
- final List<String> encodings = new ArrayList<>(contentDecoderMap.keySet());
- Collections.sort(encodings);
- b.add(new RequestAcceptEncoding(encodings));
- } else {
- b.add(new RequestAcceptEncoding());
- }
- }
- if (!authCachingDisabled) {
- b.add(new RequestAuthCache());
- }
- if (!cookieManagementDisabled) {
- b.add(new ResponseProcessCookies());
+ final HttpProcessorBuilder b = HttpProcessorBuilder.create();
+ if (requestFirst != null) {
+ for (final HttpRequestInterceptor i: requestFirst) {
+ b.addFirst(i);
+ }
+ }
+ if (responseFirst != null) {
+ for (final HttpResponseInterceptor i: responseFirst) {
+ b.addFirst(i);
+ }
+ }
+ b.addAll(
+ new RequestDefaultHeaders(defaultHeaders),
+ new RequestContent(),
+ new RequestTargetHost(),
+ new RequestClientConnControl(),
+ new RequestUserAgent(userAgentCopy),
+ new RequestExpectContinue());
+ if (!cookieManagementDisabled) {
+ b.add(new RequestAddCookies());
+ }
+ if (!contentCompressionDisabled) {
+ if (contentDecoderMap != null) {
+ final List<String> encodings = new ArrayList<>(contentDecoderMap.keySet());
+ Collections.sort(encodings);
+ b.add(new RequestAcceptEncoding(encodings));
+ } else {
+ b.add(new RequestAcceptEncoding());
}
- if (!contentCompressionDisabled) {
- if (contentDecoderMap != null) {
- final RegistryBuilder<InputStreamFactory> b2 = RegistryBuilder.create();
- for (final Map.Entry<String, InputStreamFactory> entry: contentDecoderMap.entrySet()) {
- b2.register(entry.getKey(), entry.getValue());
- }
- b.add(new ResponseContentEncoding(b2.build()));
- } else {
- b.add(new ResponseContentEncoding());
+ }
+ if (!authCachingDisabled) {
+ b.add(new RequestAuthCache());
+ }
+ if (!cookieManagementDisabled) {
+ b.add(new ResponseProcessCookies());
+ }
+ if (!contentCompressionDisabled) {
+ if (contentDecoderMap != null) {
+ final RegistryBuilder<InputStreamFactory> b2 = RegistryBuilder.create();
+ for (final Map.Entry<String, InputStreamFactory> entry: contentDecoderMap.entrySet()) {
+ b2.register(entry.getKey(), entry.getValue());
}
+ b.add(new ResponseContentEncoding(b2.build()));
+ } else {
+ b.add(new ResponseContentEncoding());
}
- if (requestLast != null) {
- for (final HttpRequestInterceptor i: requestLast) {
- b.addLast(i);
- }
+ }
+ if (requestLast != null) {
+ for (final HttpRequestInterceptor i: requestLast) {
+ b.addLast(i);
}
- if (responseLast != null) {
- for (final HttpResponseInterceptor i: responseLast) {
- b.addLast(i);
- }
+ }
+ if (responseLast != null) {
+ for (final HttpResponseInterceptor i: responseLast) {
+ b.addLast(i);
}
- httpprocessorCopy = b.build();
}
- execChain = new ProtocolExec(execChain, httpprocessorCopy);
+ execChain = new ProtocolExec(execChain, b.build());
execChain = decorateProtocolExec(execChain);
@@ -1147,7 +849,7 @@ public class HttpClientBuilder {
}
Lookup<CookieSpecProvider> cookieSpecRegistryCopy = this.cookieSpecRegistry;
if (cookieSpecRegistryCopy == null) {
- cookieSpecRegistryCopy = CookieSpecRegistries.createDefault(publicSuffixMatcherCopy);
+ cookieSpecRegistryCopy = CookieSpecRegistries.createDefault();
}
CookieStore defaultCookieStore = this.cookieStore;
Modified: httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/impl/sync/TestFutureRequestExecutionService.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/impl/sync/TestFutureRequestExecutionService.java?rev=1777768&r1=1777767&r2=1777768&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/impl/sync/TestFutureRequestExecutionService.java (original)
+++ httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/impl/sync/TestFutureRequestExecutionService.java Sat Jan 7 11:38:46 2017
@@ -39,6 +39,8 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
+import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.apache.hc.client5.http.methods.HttpGet;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.concurrent.FutureCallback;
@@ -66,32 +68,35 @@ public class TestFutureRequestExecutionS
@Before
public void before() throws Exception {
- this.localServer = ServerBootstrap.bootstrap()
- .registerHandler("/wait", new HttpRequestHandler() {
+ this.localServer = ServerBootstrap.bootstrap()
+ .registerHandler("/wait", new HttpRequestHandler() {
- @Override
- public void handle(
- final ClassicHttpRequest request,
- final ClassicHttpResponse response,
- final HttpContext context) throws HttpException, IOException {
- try {
- while(blocked.get()) {
- Thread.sleep(10);
- }
- } catch (final InterruptedException e) {
- throw new IllegalStateException(e);
+ @Override
+ public void handle(
+ final ClassicHttpRequest request,
+ final ClassicHttpResponse response,
+ final HttpContext context) throws HttpException, IOException {
+ try {
+ while(blocked.get()) {
+ Thread.sleep(10);
}
- response.setCode(200);
+ } catch (final InterruptedException e) {
+ throw new IllegalStateException(e);
}
- }).create();
-
- this.localServer.start();
- uri = "http://localhost:" + this.localServer.getLocalPort() + "/wait";
- final CloseableHttpClient httpClient = HttpClientBuilder.create()
- .setMaxConnPerRoute(5)
- .build();
- final ExecutorService executorService = Executors.newFixedThreadPool(5);
- httpAsyncClientWithFuture = new FutureRequestExecutionService(httpClient, executorService);
+ response.setCode(200);
+ }
+ }).create();
+
+ this.localServer.start();
+ uri = "http://localhost:" + this.localServer.getLocalPort() + "/wait";
+ final HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
+ .setMaxConnPerRoute(5)
+ .build();
+ final CloseableHttpClient httpClient = HttpClientBuilder.create()
+ .setConnectionManager(cm)
+ .build();
+ final ExecutorService executorService = Executors.newFixedThreadPool(5);
+ httpAsyncClientWithFuture = new FutureRequestExecutionService(httpClient, executorService);
}
@After
Modified: httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/localserver/LocalServerTestBase.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/localserver/LocalServerTestBase.java?rev=1777768&r1=1777767&r2=1777768&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/localserver/LocalServerTestBase.java (original)
+++ httpcomponents/httpclient/trunk/httpclient5/src/test/java/org/apache/hc/client5/http/localserver/LocalServerTestBase.java Sat Jan 7 11:38:46 2017
@@ -80,8 +80,8 @@ public abstract class LocalServerTestBas
}
this.connManager = new PoolingHttpClientConnectionManager();
+ this.connManager.setDefaultSocketConfig(socketConfig);
this.clientBuilder = HttpClientBuilder.create()
- .setDefaultSocketConfig(socketConfig)
.setConnectionManager(this.connManager);
}