diff options
author | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2012-09-30 15:12:41 +0000 |
---|---|---|
committer | rfeng <rfeng@13f79535-47bb-0310-9956-ffa450edef68> | 2012-09-30 15:12:41 +0000 |
commit | c526245f6de45f24c78745ef4c33f4e336ea3606 (patch) | |
tree | 4f57ed16c3f3a9deb3af02cb22dc3adc32b225ea /sca-java-2.x/trunk/modules/host-http/src | |
parent | 29c838253772a7f03ca3832139bab0388c20df03 (diff) |
Enhance the http client configuration to make it customizable
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1392033 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'sca-java-2.x/trunk/modules/host-http/src')
-rw-r--r-- | sca-java-2.x/trunk/modules/host-http/src/main/java/org/apache/tuscany/sca/host/http/client/HttpClientFactory.java | 80 |
1 files changed, 70 insertions, 10 deletions
diff --git a/sca-java-2.x/trunk/modules/host-http/src/main/java/org/apache/tuscany/sca/host/http/client/HttpClientFactory.java b/sca-java-2.x/trunk/modules/host-http/src/main/java/org/apache/tuscany/sca/host/http/client/HttpClientFactory.java index 339d2f433e..53b24a2f11 100644 --- a/sca-java-2.x/trunk/modules/host-http/src/main/java/org/apache/tuscany/sca/host/http/client/HttpClientFactory.java +++ b/sca-java-2.x/trunk/modules/host-http/src/main/java/org/apache/tuscany/sca/host/http/client/HttpClientFactory.java @@ -19,10 +19,17 @@ package org.apache.tuscany.sca.host.http.client; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import org.apache.http.ConnectionReuseStrategy; +import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; +import org.apache.http.conn.ConnectionKeepAliveStrategy; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLInitializationException; import org.apache.http.conn.ssl.SSLSocketFactory; +import org.apache.http.impl.NoConnectionReuseStrategy; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.impl.conn.PoolingClientConnectionManager; import org.apache.http.impl.conn.SchemeRegistryFactory; @@ -30,6 +37,7 @@ import org.apache.http.params.BasicHttpParams; import org.apache.http.params.HttpConnectionParams; import org.apache.http.params.HttpParams; import org.apache.http.params.HttpProtocolParams; +import org.apache.http.protocol.HttpContext; import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.core.LifeCycleListener; import org.apache.tuscany.sca.core.UtilityExtensionPoint; @@ -38,6 +46,13 @@ import org.apache.tuscany.sca.core.UtilityExtensionPoint; * @version $Rev$ $Date$ */ public class HttpClientFactory implements LifeCycleListener { + private int soTimeout = 30000; + private int connectionTimeout = 60000; + private boolean staleCheckingEnabled = false; + private long timeToLive = 60; // seconds + private int maxPerRoute = 256; + private int maxTotal = 1024; + private boolean sslHostVerificationEnabled = false; private HttpClient httpClient; @@ -46,12 +61,50 @@ public class HttpClientFactory implements LifeCycleListener { return utilities.getUtility(HttpClientFactory.class); } + public HttpClientFactory() { + + } + + public HttpClientFactory(ExtensionPointRegistry registry, Map<String, String> attributes) { + if (attributes != null) { + String val = attributes.get("soTimeout"); + if (val != null) { + this.soTimeout = Integer.parseInt(val); + } + val = attributes.get("connectionTimeout"); + if (val != null) { + this.connectionTimeout = Integer.parseInt(val); + } + val = attributes.get("staleCheckingEnabled"); + if (val != null) { + this.staleCheckingEnabled = Boolean.parseBoolean(val); + } + val = attributes.get("timeToLive"); + if (val != null) { + this.timeToLive = Long.parseLong(val); + } + val = attributes.get("sslHostVerificationEnabled"); + if (val != null) { + this.sslHostVerificationEnabled = Boolean.parseBoolean(val); + } + val = attributes.get("maxTotal"); + if (val != null) { + this.maxTotal = Integer.parseInt(val); + } + val = attributes.get("maxPerRoute"); + if (val != null) { + this.maxPerRoute = Integer.parseInt(val); + } + } + } + public HttpClient createHttpClient() { HttpParams defaultParameters = new BasicHttpParams(); HttpProtocolParams.setContentCharset(defaultParameters, "UTF-8"); - HttpConnectionParams.setConnectionTimeout(defaultParameters, 60000); - HttpConnectionParams.setSoTimeout(defaultParameters, 60000); + HttpConnectionParams.setConnectionTimeout(defaultParameters, connectionTimeout); + HttpConnectionParams.setSoTimeout(defaultParameters, soTimeout); + HttpConnectionParams.setStaleCheckingEnabled(defaultParameters, staleCheckingEnabled); // See https://issues.apache.org/jira/browse/HTTPCLIENT-1138 SchemeRegistry supportedSchemes = null; @@ -62,17 +115,24 @@ public class HttpClientFactory implements LifeCycleListener { supportedSchemes = SchemeRegistryFactory.createDefault(); } - // FIXME: By pass host name verification - SSLSocketFactory socketFactory = (SSLSocketFactory)supportedSchemes.getScheme("https").getSchemeSocketFactory(); - socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + if (!sslHostVerificationEnabled) { + // FIXME: By pass host name verification + SSLSocketFactory socketFactory = + (SSLSocketFactory)supportedSchemes.getScheme("https").getSchemeSocketFactory(); + socketFactory.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); + } PoolingClientConnectionManager connectionManager = - new PoolingClientConnectionManager(supportedSchemes); + new PoolingClientConnectionManager(supportedSchemes, timeToLive, TimeUnit.SECONDS); - connectionManager.setDefaultMaxPerRoute(256); - connectionManager.setMaxTotal(1024); - - return new DefaultHttpClient(connectionManager, defaultParameters); + connectionManager.setDefaultMaxPerRoute(maxPerRoute); + connectionManager.setMaxTotal(maxTotal); + + DefaultHttpClient client = new DefaultHttpClient(connectionManager, defaultParameters); + if (timeToLive <= 0) { + client.setReuseStrategy(new NoConnectionReuseStrategy()); + } + return client; } @Override |