You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2013/12/09 03:11:46 UTC

[42/50] [abbrv] git commit: CAMEL-7010 Upgraded camel-http4 to use HttpClient 4.3 API

CAMEL-7010 Upgraded camel-http4 to use HttpClient 4.3 API


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/7e65a14d
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/7e65a14d
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/7e65a14d

Branch: refs/heads/camel-gora
Commit: 7e65a14d0fb2e49282bbf51ebe463c6fff38073d
Parents: 3227252
Author: Willem Jiang <wi...@gmail.com>
Authored: Sat Dec 7 22:11:15 2013 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Sat Dec 7 22:12:29 2013 +0800

----------------------------------------------------------------------
 .../aws/swf/CamelSWFWorkflowClientTest.java     |   2 +-
 .../aws/swf/SwfComponentSpringTest.java         |   2 -
 .../camel/component/http/helper/HttpHelper.java |   2 +-
 ...BasicAuthenticationHttpClientConfigurer.java |  10 +-
 .../http4/CompositeHttpConfigurer.java          |   6 +-
 .../component/http4/HttpClientConfigurer.java   |   4 +-
 .../camel/component/http4/HttpComponent.java    | 147 +++++++------------
 .../camel/component/http4/HttpEndpoint.java     |  90 ++++++------
 .../camel/component/http4/HttpProducer.java     |  26 ++--
 .../http4/ProxyHttpClientConfigurer.java        |  13 +-
 .../http4/AdviceAndInterceptHttp4IssueTest.java |   2 +-
 .../component/http4/HttpAuthenticationTest.java |  22 +--
 .../component/http4/HttpCompressionTest.java    |  19 ++-
 .../http4/HttpProducerContentTypeTest.java      |   1 -
 .../component/http4/HttpProxyServerTest.java    |  51 ++-----
 .../camel/component/http4/HttpRedirectTest.java |   8 +-
 .../http4/HttpReferenceParameterTest.java       |   4 +-
 .../component/http4/HttpSOTimeoutTest.java      |   4 +-
 .../component/http4/HttpServerTestSupport.java  |   6 +-
 .../http4/HttpWithHttpUriHeaderTest.java        |   1 -
 .../http4/HttpsAuthenticationTest.java          |  24 ++-
 ...TwoDifferentSslContextParametersGetTest.java |   2 +
 .../apache/camel/itest/http/Http4RouteTest.java |   2 +-
 .../itest/http/Http4EndpointTest-context.xml    |  34 +----
 .../Http4MaxConnectionPerHostTest-context.xml   |  30 ----
 25 files changed, 205 insertions(+), 307 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java
index 42b53fe..69bc01f 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/CamelSWFWorkflowClientTest.java
@@ -72,7 +72,7 @@ public class CamelSWFWorkflowClientTest {
         Date closeTimestamp = new Date();
         executionInfo.setCloseTimestamp(closeTimestamp);
         executionInfo.setExecutionStatus("CLOSED");
-        executionInfo.setTagList(Collections.EMPTY_LIST);
+        executionInfo.setTagList((List<String>)Collections.EMPTY_LIST);
 
         WorkflowExecutionDetail workflowExecutionDetail = new WorkflowExecutionDetail();
         workflowExecutionDetail.setExecutionInfo(executionInfo);

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/SwfComponentSpringTest.java
----------------------------------------------------------------------
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/SwfComponentSpringTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/SwfComponentSpringTest.java
index 12b8437..55b8a50 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/SwfComponentSpringTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/swf/SwfComponentSpringTest.java
@@ -18,10 +18,8 @@ package org.apache.camel.component.aws.swf;
 
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.component.aws.sqs.SqsConstants;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Test;

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
----------------------------------------------------------------------
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java b/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
index 96ebeef..65b5a03 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/helper/HttpHelper.java
@@ -167,7 +167,7 @@ public final class HttpHelper {
         } else {
             CachedOutputStream cos = new CachedOutputStream(exchange);
             IOHelper.copyAndCloseInput(is, cos);
-            return cos.getStreamCache();
+            return cos.newStreamCache();
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/main/java/org/apache/camel/component/http4/BasicAuthenticationHttpClientConfigurer.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/BasicAuthenticationHttpClientConfigurer.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/BasicAuthenticationHttpClientConfigurer.java
index c17df1c..8671369 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/BasicAuthenticationHttpClientConfigurer.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/BasicAuthenticationHttpClientConfigurer.java
@@ -20,8 +20,8 @@ import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.Credentials;
 import org.apache.http.auth.NTCredentials;
 import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.HttpClient;
-import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.HttpClientBuilder;
 
 public class BasicAuthenticationHttpClientConfigurer implements HttpClientConfigurer {
     private final String username;
@@ -36,14 +36,16 @@ public class BasicAuthenticationHttpClientConfigurer implements HttpClientConfig
         this.host = host;
     }
 
-    public void configureHttpClient(HttpClient client) {
+    public void configureHttpClient(HttpClientBuilder clientBuilder) {
         Credentials defaultcreds;
         if (domain != null) {
             defaultcreds = new NTCredentials(username, password, host, domain);
         } else {
             defaultcreds = new UsernamePasswordCredentials(username, password);
         }
-        ((DefaultHttpClient) client).getCredentialsProvider().setCredentials(AuthScope.ANY, defaultcreds);
+        BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+        credentialsProvider.setCredentials(AuthScope.ANY, defaultcreds);
+        clientBuilder.setDefaultCredentialsProvider(credentialsProvider);
     }
 
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/main/java/org/apache/camel/component/http4/CompositeHttpConfigurer.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/CompositeHttpConfigurer.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/CompositeHttpConfigurer.java
index f96e71f..29c3d98 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/CompositeHttpConfigurer.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/CompositeHttpConfigurer.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.http4;
 import java.util.ArrayList;
 import java.util.List;
 
-import org.apache.http.client.HttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
 
 public class CompositeHttpConfigurer implements HttpClientConfigurer {
 
@@ -35,9 +35,9 @@ public class CompositeHttpConfigurer implements HttpClientConfigurer {
         configurers.remove(configurer);
     }
 
-    public void configureHttpClient(HttpClient client) {
+    public void configureHttpClient(HttpClientBuilder clientBuilder) {
         for (HttpClientConfigurer configurer : configurers) {
-            configurer.configureHttpClient(client);
+            configurer.configureHttpClient(clientBuilder);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpClientConfigurer.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpClientConfigurer.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpClientConfigurer.java
index e79174f..95b2672 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpClientConfigurer.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpClientConfigurer.java
@@ -16,7 +16,7 @@
  */
 package org.apache.camel.component.http4;
 
-import org.apache.http.client.HttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
 
 /**
  * A pluggable strategy for configuring the HttpClient used by this component
@@ -30,5 +30,5 @@ public interface HttpClientConfigurer {
      *
      * @param client the client
      */
-    void configureHttpClient(HttpClient client);
+    void configureHttpClient(HttpClientBuilder clientBuilder);
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
index 4d0d230..855f40e 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpComponent.java
@@ -16,7 +16,9 @@
  */
 package org.apache.camel.component.http4;
 
+import java.io.IOException;
 import java.net.URI;
+import java.security.GeneralSecurityException;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
@@ -31,23 +33,18 @@ import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 import org.apache.camel.util.UnsafeUriCharactersEncoder;
 import org.apache.camel.util.jsse.SSLContextParameters;
-import org.apache.http.auth.params.AuthParamBean;
 import org.apache.http.client.CookieStore;
-import org.apache.http.client.params.ClientParamBean;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.params.ConnRouteParamBean;
-import org.apache.http.conn.scheme.PlainSocketFactory;
-import org.apache.http.conn.scheme.Scheme;
-import org.apache.http.conn.scheme.SchemeRegistry;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.config.Registry;
+import org.apache.http.config.RegistryBuilder;
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.apache.http.conn.socket.ConnectionSocketFactory;
+import org.apache.http.conn.socket.PlainConnectionSocketFactory;
 import org.apache.http.conn.ssl.BrowserCompatHostnameVerifier;
-import org.apache.http.conn.ssl.SSLSocketFactory;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
 import org.apache.http.conn.ssl.X509HostnameVerifier;
-import org.apache.http.cookie.params.CookieSpecParamBean;
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.HttpConnectionParamBean;
-import org.apache.http.params.HttpParams;
-import org.apache.http.params.HttpProtocolParamBean;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.apache.http.protocol.HttpContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -62,7 +59,7 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
     private static final Logger LOG = LoggerFactory.getLogger(HttpComponent.class);
 
     protected HttpClientConfigurer httpClientConfigurer;
-    protected ClientConnectionManager clientConnectionManager;
+    protected HttpClientConnectionManager clientConnectionManager;
     protected HttpBinding httpBinding;
     protected HttpContext httpContext;
     protected SSLContextParameters sslContextParameters;
@@ -75,8 +72,6 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
     // It's MILLISECONDS, the default value is always keep alive
     protected long connectionTimeToLive = -1;
 
-    private volatile SSLContextParameters usedSslContextParams;
-
     /**
      * Connects the URL specified on the endpoint to the specified processor.
      *
@@ -151,11 +146,7 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
             String proxyAuthPassword = getAndRemoveParameter(parameters, "proxyAuthPassword", String.class);
             String proxyAuthDomain = getAndRemoveParameter(parameters, "proxyAuthDomain", String.class);
             String proxyAuthNtHost = getAndRemoveParameter(parameters, "proxyAuthNtHost", String.class);
-            boolean secureProxy = HttpHelper.isSecureConnection(proxyAuthScheme);
-
-            // register scheme for proxy
-            registerPort(secureProxy, x509HostnameVerifier, proxyAuthPort, sslContextParameters);
-
+            
             if (proxyAuthUsername != null && proxyAuthPassword != null) {
                 return CompositeHttpConfigurer.combineConfigurers(
                     configurer, new ProxyHttpClientConfigurer(proxyAuthHost, proxyAuthPort, proxyAuthScheme, proxyAuthUsername, proxyAuthPassword, proxyAuthDomain, proxyAuthNtHost));
@@ -171,7 +162,14 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
         Map<String, Object> httpClientParameters = new HashMap<String, Object>(parameters);
         // http client can be configured from URI options
-        HttpParams clientParams = configureHttpParams(parameters);
+        HttpClientBuilder clientBuilder = HttpClientBuilder.create();
+        // allow the builder pattern
+        IntrospectionSupport.setProperties(clientBuilder, parameters, "httpClient.", true);
+        // set the Request configure this way and allow the builder pattern
+        RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
+        IntrospectionSupport.setProperties(requestConfigBuilder, parameters, "httpClient.", true);
+        clientBuilder.setDefaultRequestConfig(requestConfigBuilder.build());
+        
         // validate that we could resolve all httpClient. parameters as this component is lenient
         validateParameters(uri, parameters, "httpClient.");
         
@@ -191,6 +189,7 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
         if (x509HostnameVerifier == null) {
             x509HostnameVerifier = getX509HostnameVerifier();
         }
+        
 
         // TODO cmueller: remove the "sslContextParametersRef" look up in Camel 3.0
         SSLContextParameters sslContextParameters = resolveAndRemoveReferenceParameter(parameters, "sslContextParametersRef", SSLContextParameters.class);
@@ -200,6 +199,7 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
         if (sslContextParameters == null) {
             sslContextParameters = getSslContextParameters();
         }
+        
         String httpMethodRestrict = getAndRemoveParameter(parameters, "httpMethodRestrict", String.class);
         
         HeaderFilterStrategy headerFilterStrategy = resolveAndRemoveReferenceParameter(parameters, "headerFilterStrategy", HeaderFilterStrategy.class);
@@ -250,7 +250,11 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
         String endpointUriString = endpointUri.toString();
 
         LOG.debug("Creating endpoint uri {}", endpointUriString);
-        HttpEndpoint endpoint = new HttpEndpoint(endpointUriString, this, clientParams, clientConnectionManager, configurer);
+        HttpClientConnectionManager localConnectionManager = clientConnectionManager;
+        if (localConnectionManager == null) {
+            localConnectionManager = createConnectionManager(createConnectionRegistry(x509HostnameVerifier, sslContextParameters));
+        }
+        HttpEndpoint endpoint = new HttpEndpoint(endpointUriString, this, clientBuilder, localConnectionManager, configurer);
         if (urlRewrite != null) {
             // let CamelContext deal with the lifecycle of the url rewrite
             // this ensures its being shutdown when Camel shutdown etc.
@@ -294,9 +298,7 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
         if (endpoint.getCookieStore() == null) {
             endpoint.setCookieStore(getCookieStore());
         }
-        // register port on schema registry
-        registerPort(secure, x509HostnameVerifier, port, sslContextParameters);
-
+        
         return endpoint;
     }
    
@@ -314,86 +316,37 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
         return port;
     }
     
-    @SuppressWarnings("deprecation")
-    protected void registerPort(boolean secure, X509HostnameVerifier x509HostnameVerifier, int port, SSLContextParameters sslContextParams) throws Exception {
-        if (usedSslContextParams == null) {
-            usedSslContextParams = sslContextParams;
-        }
-
-        // we must use same SSLContextParameters for this component.
-        if (usedSslContextParams != sslContextParams) {
-            // use identity hashcode in exception message
-            Object previous = ObjectHelper.getIdentityHashCode(usedSslContextParams);
-            Object next = ObjectHelper.getIdentityHashCode(sslContextParams);
-            throw new IllegalArgumentException("Only same instance of SSLContextParameters is supported. Cannot use a different instance."
-                    + " Previous instance hashcode: " + previous + ", New instance hashcode: " + next);
-        }
-
-        SchemeRegistry registry = clientConnectionManager.getSchemeRegistry();
-        if (secure) {
-            SSLSocketFactory socketFactory;
-            if (sslContextParams == null) {
-                socketFactory = SSLSocketFactory.getSocketFactory();
-            } else {
-                socketFactory = new SSLSocketFactory(sslContextParams.createSSLContext());
-            }
-
-            socketFactory.setHostnameVerifier(x509HostnameVerifier);
-            // must register both https and https4
-            registry.register(new Scheme("https", port, socketFactory));
-            LOG.info("Registering SSL scheme https on port " + port);
-            
-            registry.register(new Scheme("https4", port, socketFactory));
-            LOG.info("Registering SSL scheme https4 on port " + port);
+    protected Registry<ConnectionSocketFactory> createConnectionRegistry(X509HostnameVerifier x509HostnameVerifier, SSLContextParameters sslContextParams)
+        throws GeneralSecurityException, IOException {
+        // create the default connection registry to use
+        RegistryBuilder<ConnectionSocketFactory> builder = RegistryBuilder.<ConnectionSocketFactory>create();
+        builder.register("http", PlainConnectionSocketFactory.getSocketFactory());
+        builder.register("http4", PlainConnectionSocketFactory.getSocketFactory());
+        if (sslContextParams != null) {
+            builder.register("https", new SSLConnectionSocketFactory(sslContextParams.createSSLContext(), x509HostnameVerifier));
+            builder.register("https4", new SSLConnectionSocketFactory(sslContextParams.createSSLContext(), x509HostnameVerifier));
         } else {
-            // must register both http and http4
-            registry.register(new Scheme("http", port, new PlainSocketFactory()));
-            LOG.info("Registering PLAIN scheme http on port " + port);
-            registry.register(new Scheme("http4", port, new PlainSocketFactory()));
-            LOG.info("Registering PLAIN scheme http4 on port " + port);
+            builder.register("https4", SSLConnectionSocketFactory.getSocketFactory());
+            builder.register("https", SSLConnectionSocketFactory.getSocketFactory());
         }
+        return builder.build();
     }
-
-    protected ClientConnectionManager createConnectionManager() {
-        SchemeRegistry schemeRegistry = new SchemeRegistry();
+    
+    protected HttpClientConnectionManager createConnectionManager(Registry<ConnectionSocketFactory> registry) {
         // setup the connection live time
-        PoolingClientConnectionManager answer = new PoolingClientConnectionManager(schemeRegistry, getConnectionTimeToLive(), TimeUnit.MILLISECONDS);
+        PoolingHttpClientConnectionManager answer = 
+            new PoolingHttpClientConnectionManager(registry, null, null, null, getConnectionTimeToLive(), TimeUnit.MILLISECONDS);
         if (getMaxTotalConnections() > 0) {
             answer.setMaxTotal(getMaxTotalConnections());
         }
         if (getConnectionsPerRoute() > 0) {
             answer.setDefaultMaxPerRoute(getConnectionsPerRoute());
         }
-        
         LOG.info("Created ClientConnectionManager " + answer);
 
         return answer;
     }
 
-    protected HttpParams configureHttpParams(Map<String, Object> parameters) throws Exception {
-        HttpParams clientParams = new BasicHttpParams();
-
-        AuthParamBean authParamBean = new AuthParamBean(clientParams);
-        IntrospectionSupport.setProperties(authParamBean, parameters, "httpClient.");
-
-        ClientParamBean clientParamBean = new ClientParamBean(clientParams);
-        IntrospectionSupport.setProperties(clientParamBean, parameters, "httpClient.");
-        
-        ConnRouteParamBean connRouteParamBean = new ConnRouteParamBean(clientParams);
-        IntrospectionSupport.setProperties(connRouteParamBean, parameters, "httpClient.");
-
-        CookieSpecParamBean cookieSpecParamBean = new CookieSpecParamBean(clientParams);
-        IntrospectionSupport.setProperties(cookieSpecParamBean, parameters, "httpClient.");
-
-        HttpConnectionParamBean httpConnectionParamBean = new HttpConnectionParamBean(clientParams);
-        IntrospectionSupport.setProperties(httpConnectionParamBean, parameters, "httpClient.");
-
-        HttpProtocolParamBean httpProtocolParamBean = new HttpProtocolParamBean(clientParams);
-        IntrospectionSupport.setProperties(httpProtocolParamBean, parameters, "httpClient.");
-
-        return clientParams;
-    }
-
     @Override
     protected boolean useIntrospectionOnEndpoint() {
         return false;
@@ -407,11 +360,11 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
         this.httpClientConfigurer = httpClientConfigurer;
     }
 
-    public ClientConnectionManager getClientConnectionManager() {
+    public HttpClientConnectionManager getClientConnectionManager() {
         return clientConnectionManager;
     }
 
-    public void setClientConnectionManager(ClientConnectionManager clientConnectionManager) {
+    public void setClientConnectionManager(HttpClientConnectionManager clientConnectionManager) {
         this.clientConnectionManager = clientConnectionManager;
     }
 
@@ -482,9 +435,6 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
     @Override
     public void doStart() throws Exception {
         super.doStart();
-        if (clientConnectionManager == null) {
-            clientConnectionManager = createConnectionManager();
-        }
     }
 
     @Override
@@ -495,7 +445,8 @@ public class HttpComponent extends HeaderFilterStrategyComponent {
             clientConnectionManager.shutdown();
             clientConnectionManager = null;
         }
-        usedSslContextParams = null;
+        
         super.doStop();
     }
+    
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java
index c5086a3..2ef06b8 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpEndpoint.java
@@ -21,7 +21,6 @@ import java.net.URISyntaxException;
 
 import org.apache.camel.PollingConsumer;
 import org.apache.camel.Producer;
-import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.component.http4.helper.HttpHelper;
 import org.apache.camel.impl.DefaultPollingEndpoint;
 import org.apache.camel.spi.HeaderFilterStrategy;
@@ -30,11 +29,10 @@ import org.apache.camel.util.ObjectHelper;
 import org.apache.http.HttpHost;
 import org.apache.http.client.CookieStore;
 import org.apache.http.client.HttpClient;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.params.ConnRoutePNames;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.HttpParams;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.conn.HttpClientConnectionManager;
+import org.apache.http.impl.client.BasicCookieStore;
+import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.protocol.HttpContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -52,9 +50,9 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
     private HttpContext httpContext;
     private HttpComponent component;
     private URI httpUri;
-    private HttpParams clientParams;
     private HttpClientConfigurer httpClientConfigurer;
-    private ClientConnectionManager clientConnectionManager;
+    private HttpClientConnectionManager clientConnectionManager;
+    private HttpClientBuilder clientBuilder;
     private HttpClient httpClient;
     private boolean throwExceptionOnFailure = true;
     private boolean bridgeEndpoint;
@@ -67,8 +65,8 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
     private String httpMethodRestrict;
     private UrlRewrite urlRewrite;
     private boolean clearExpiredCookies = true;
-    private CookieStore cookieStore;
-
+    private CookieStore cookieStore = new BasicCookieStore();
+    
     public HttpEndpoint() {
     }
 
@@ -76,21 +74,21 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
         this(endPointURI, component, httpURI, null);
     }
 
-    public HttpEndpoint(String endPointURI, HttpComponent component, URI httpURI, ClientConnectionManager clientConnectionManager) throws URISyntaxException {
-        this(endPointURI, component, httpURI, new BasicHttpParams(), clientConnectionManager, null);
+    public HttpEndpoint(String endPointURI, HttpComponent component, URI httpURI, HttpClientConnectionManager clientConnectionManager) throws URISyntaxException {
+        this(endPointURI, component, httpURI, HttpClientBuilder.create(), clientConnectionManager, null);
     }
     
-    public HttpEndpoint(String endPointURI, HttpComponent component, HttpParams clientParams,
-                        ClientConnectionManager clientConnectionManager, HttpClientConfigurer clientConfigurer) throws URISyntaxException {
-        this(endPointURI, component, null, clientParams, clientConnectionManager, clientConfigurer);
+    public HttpEndpoint(String endPointURI, HttpComponent component, HttpClientBuilder clientBuilder,
+                        HttpClientConnectionManager clientConnectionManager, HttpClientConfigurer clientConfigurer) throws URISyntaxException {
+        this(endPointURI, component, null, clientBuilder, clientConnectionManager, clientConfigurer);
     }
 
-    public HttpEndpoint(String endPointURI, HttpComponent component, URI httpURI, HttpParams clientParams,
-                        ClientConnectionManager clientConnectionManager, HttpClientConfigurer clientConfigurer) throws URISyntaxException {
+    public HttpEndpoint(String endPointURI, HttpComponent component, URI httpURI, HttpClientBuilder clientBuilder,
+                        HttpClientConnectionManager clientConnectionManager, HttpClientConfigurer clientConfigurer) throws URISyntaxException {
         super(endPointURI, component);
         this.component = component;
         this.httpUri = httpURI;
-        this.clientParams = clientParams;
+        this.clientBuilder = clientBuilder;
         this.httpClientConfigurer = clientConfigurer;
         this.clientConnectionManager = clientConnectionManager;
     }
@@ -125,13 +123,13 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
      * Producers and consumers should use the {@link #getHttpClient()} method instead.
      */
     protected HttpClient createHttpClient() {
-        ObjectHelper.notNull(clientParams, "clientParams");
+        ObjectHelper.notNull(clientBuilder, "httpClientBuilder");
         ObjectHelper.notNull(clientConnectionManager, "httpConnectionManager");
 
-        DefaultHttpClient answer = new DefaultHttpClient(clientConnectionManager, getClientParams());
-        if (cookieStore != null) {
-            answer.setCookieStore(cookieStore);
-        }
+        // setup the cookieStore
+        clientBuilder.setDefaultCookieStore(cookieStore);
+        // setup the httpConnectionManager
+        clientBuilder.setConnectionManager(clientConnectionManager);
 
         // configure http proxy from camelContext
         if (ObjectHelper.isNotEmpty(getCamelContext().getProperty("http.proxyHost")) && ObjectHelper.isNotEmpty(getCamelContext().getProperty("http.proxyPort"))) {
@@ -143,27 +141,27 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
                 scheme = HttpHelper.isSecureConnection(getEndpointUri()) ? "https" : "http";
             }
             LOG.debug("CamelContext properties http.proxyHost, http.proxyPort, and http.proxyScheme detected. Using http proxy host: {} port: {} scheme: {}", new Object[]{host, port, scheme});
-            try {
-                component.registerPort(HttpHelper.isSecureConnection(scheme), component.getX509HostnameVerifier(), port, component.getSslContextParameters());
-            } catch (Exception ex) {
-                throw new RuntimeCamelException(ex);
-            }
             HttpHost proxy = new HttpHost(host, port, scheme);
-            answer.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);
+            clientBuilder.setProxy(proxy);
+        }
+        
+        if (isAuthenticationPreemptive()) {
+            // setup the PreemptiveAuthInterceptor here
+            clientBuilder.addInterceptorFirst(new PreemptiveAuthInterceptor());
         }
 
         HttpClientConfigurer configurer = getHttpClientConfigurer();
         if (configurer != null) {
-            configurer.configureHttpClient(answer);
+            configurer.configureHttpClient(clientBuilder);
         }
 
         if (isBridgeEndpoint()) {
             // need to use noop cookiestore as we do not want to keep cookies in memory
-            answer.setCookieStore(new NoopCookieStore());
+            clientBuilder.setDefaultCookieStore(new NoopCookieStore());
         }
 
-        LOG.debug("Created HttpClient {}", answer);
-        return answer;
+        LOG.debug("Setup the HttpClientBuilder {}", clientBuilder);
+        return clientBuilder.build();
     }
 
     public void connect(HttpConsumer consumer) throws Exception {
@@ -182,31 +180,39 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
     public boolean isSingleton() {
         return true;
     }
+    
+    @Override
+    protected void doStop() throws Exception {
+        if (component != null && component.getClientConnectionManager() != clientConnectionManager) {
+            // need to shutdown the ConnectionManager
+            clientConnectionManager.shutdown();
+        }
+    }
 
 
     // Properties
     //-------------------------------------------------------------------------
 
     /**
-     * Provide access to the client parameters used on new {@link HttpClient} instances
+     * Provide access to the http client request parameters used on new {@link RequestConfig} instances
      * used by producers or consumers of this endpoint.
      */
-    public HttpParams getClientParams() {
-        return clientParams;
+    public HttpClientBuilder getClientBuilder() {
+        return clientBuilder;
     }
 
     /**
-     * Provide access to the client parameters used on new {@link HttpClient} instances
+     * Provide access to the http client request parameters used on new {@link RequestConfig} instances
      * used by producers or consumers of this endpoint.
      */
-    public void setClientParams(HttpParams clientParams) {
-        this.clientParams = clientParams;
+    public void setClientBuilder(HttpClientBuilder clientBuilder) {
+        this.clientBuilder = clientBuilder;
     }
 
     public HttpClientConfigurer getHttpClientConfigurer() {
         return httpClientConfigurer;
     }
-
+    
     public HttpContext getHttpContext() {
         return httpContext;
     }
@@ -272,11 +278,11 @@ public class HttpEndpoint extends DefaultPollingEndpoint implements HeaderFilter
         this.httpUri = httpUri;
     }
 
-    public ClientConnectionManager getClientConnectionManager() {
+    public HttpClientConnectionManager getClientConnectionManager() {
         return clientConnectionManager;
     }
 
-    public void setClientConnectionManager(ClientConnectionManager clientConnectionManager) {
+    public void setClientConnectionManager(HttpClientConnectionManager clientConnectionManager) {
         this.clientConnectionManager = clientConnectionManager;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
index e2b09d4..dbe578f 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/HttpProducer.java
@@ -62,7 +62,7 @@ import org.apache.http.entity.InputStreamEntity;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.auth.BasicScheme;
 import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.params.CoreProtocolPNames;
+import org.apache.http.protocol.BasicHttpContext;
 import org.apache.http.protocol.HttpContext;
 import org.apache.http.util.EntityUtils;
 import org.slf4j.Logger;
@@ -88,11 +88,9 @@ public class HttpProducer extends DefaultProducer {
 
     public void process(Exchange exchange) throws Exception {
 
-        if (getEndpoint().isClearExpiredCookies()) {
-            if (httpClient instanceof DefaultHttpClient) {
-                boolean cleared = ((DefaultHttpClient) httpClient).getCookieStore().clearExpired(new Date());
-                log.debug("Any expired cookies cleared: {}", cleared);
-            }
+        if (getEndpoint().isClearExpiredCookies() && !getEndpoint().isBridgeEndpoint()) {
+            // create the cookies before the invocation
+            getEndpoint().getCookieStore().clearExpired(new Date());
         }
 
         // if we bridge endpoint then we need to skip matching headers with the HTTP_QUERY to avoid sending
@@ -109,15 +107,11 @@ public class HttpProducer extends DefaultProducer {
             exchange.getIn().getHeaders().remove("host");
         }
         HttpRequestBase httpRequest = createMethod(exchange);
-        if (getEndpoint().isAuthenticationPreemptive()) {
-            Credentials creds = ((DefaultHttpClient) httpClient).getCredentialsProvider().getCredentials(AuthScope.ANY);
-            httpRequest.addHeader(new BasicScheme().authenticate(creds, httpRequest));
-        }
         Message in = exchange.getIn();
         String httpProtocolVersion = in.getHeader(Exchange.HTTP_PROTOCOL_VERSION, String.class);
         if (httpProtocolVersion != null) {
             // set the HTTP protocol version
-            httpRequest.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpHelper.parserHttpVersion(httpProtocolVersion));
+            httpRequest.setProtocolVersion(HttpHelper.parserHttpVersion(httpProtocolVersion));
         }
         HeaderFilterStrategy strategy = getEndpoint().getHeaderFilterStrategy();
 
@@ -255,11 +249,15 @@ public class HttpProducer extends DefaultProducer {
      * @throws IOException can be thrown
      */
     protected HttpResponse executeMethod(HttpUriRequest httpRequest) throws IOException {
+        HttpContext localContext = new BasicHttpContext();
+        if (getEndpoint().isAuthenticationPreemptive()) {
+            BasicScheme basicAuth = new BasicScheme();
+            localContext.setAttribute("preemptive-auth", basicAuth);
+        }
         if (httpContext != null) {
-            return httpClient.execute(httpRequest, httpContext);
-        } else {
-            return httpClient.execute(httpRequest);
+            localContext = new BasicHttpContext(httpContext);
         }
+        return httpClient.execute(httpRequest, localContext);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/main/java/org/apache/camel/component/http4/ProxyHttpClientConfigurer.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/main/java/org/apache/camel/component/http4/ProxyHttpClientConfigurer.java b/components/camel-http4/src/main/java/org/apache/camel/component/http4/ProxyHttpClientConfigurer.java
index c7d4b78..35d9234 100644
--- a/components/camel-http4/src/main/java/org/apache/camel/component/http4/ProxyHttpClientConfigurer.java
+++ b/components/camel-http4/src/main/java/org/apache/camel/component/http4/ProxyHttpClientConfigurer.java
@@ -21,9 +21,8 @@ import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.Credentials;
 import org.apache.http.auth.NTCredentials;
 import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.HttpClient;
-import org.apache.http.conn.params.ConnRoutePNames;
-import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.HttpClientBuilder;
 
 /**
  * Strategy for configuring the HttpClient with a proxy
@@ -52,8 +51,8 @@ public class ProxyHttpClientConfigurer implements HttpClientConfigurer {
         this.ntHost = ntHost;
     }
 
-    public void configureHttpClient(HttpClient client) {
-        client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, new HttpHost(host, port, scheme));
+    public void configureHttpClient(HttpClientBuilder clientBuilder) {
+        clientBuilder.setProxy(new HttpHost(host, port, scheme));
 
         if (username != null && password != null) {
             Credentials defaultcreds;
@@ -62,7 +61,9 @@ public class ProxyHttpClientConfigurer implements HttpClientConfigurer {
             } else {
                 defaultcreds = new UsernamePasswordCredentials(username, password);
             }
-            ((DefaultHttpClient) client).getCredentialsProvider().setCredentials(AuthScope.ANY, defaultcreds);
+            BasicCredentialsProvider credentialsProvider = new BasicCredentialsProvider();
+            credentialsProvider.setCredentials(AuthScope.ANY, defaultcreds);
+            clientBuilder.setDefaultCredentialsProvider(credentialsProvider);
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/AdviceAndInterceptHttp4IssueTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/AdviceAndInterceptHttp4IssueTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/AdviceAndInterceptHttp4IssueTest.java
index 82085b5..d2fb645 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/AdviceAndInterceptHttp4IssueTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/AdviceAndInterceptHttp4IssueTest.java
@@ -29,7 +29,7 @@ import org.junit.Test;
 public class AdviceAndInterceptHttp4IssueTest extends CamelTestSupport {
 
     private String simpleProvider = "http4:fakeHTTPADDRESS.com:80?throwExceptionOnFailure=false";
-    private String providerWithParameter = "http4:fakeHTTPADDRESS.com:80?throwExceptionOnFailure=false&httpClient.cookiePolicy=ignoreCookies";
+    private String providerWithParameter = "http4:fakeHTTPADDRESS.com:80?throwExceptionOnFailure=false&httpClient.cookieSpec=ignoreCookies";
     private volatile boolean messageIntercepted;
 
     @Test

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpAuthenticationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpAuthenticationTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpAuthenticationTest.java
index f9576a8..5ca499c 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpAuthenticationTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpAuthenticationTest.java
@@ -16,17 +16,22 @@
  */
 package org.apache.camel.component.http4;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.component.http4.handler.AuthenticationValidationHandler;
+import org.apache.http.HttpRequestInterceptor;
+import org.apache.http.HttpResponseInterceptor;
 import org.apache.http.HttpStatus;
 import org.apache.http.localserver.LocalTestServer;
 import org.apache.http.localserver.RequestBasicAuth;
 import org.apache.http.localserver.ResponseBasicUnauthorized;
-import org.apache.http.protocol.BasicHttpProcessor;
+import org.apache.http.protocol.HttpProcessor;
+import org.apache.http.protocol.ImmutableHttpProcessor;
 import org.apache.http.protocol.ResponseContent;
 import org.junit.Test;
 
@@ -45,7 +50,6 @@ public class HttpAuthenticationTest extends BaseHttpTest {
             public void process(Exchange exchange) throws Exception {
             }
         });
-
         assertExchange(exchange);
     }
     
@@ -82,13 +86,13 @@ public class HttpAuthenticationTest extends BaseHttpTest {
     }
 
     @Override
-    protected BasicHttpProcessor getBasicHttpProcessor() {
-        BasicHttpProcessor httpproc = new BasicHttpProcessor();
-        httpproc.addInterceptor(new RequestBasicAuth());
-
-        httpproc.addInterceptor(new ResponseContent());
-        httpproc.addInterceptor(new ResponseBasicUnauthorized());
-
+    protected HttpProcessor getBasicHttpProcessor() {
+        List<HttpRequestInterceptor> requestInterceptors = new ArrayList<HttpRequestInterceptor>();
+        requestInterceptors.add(new RequestBasicAuth());
+        List<HttpResponseInterceptor> responseInterceptors = new ArrayList<HttpResponseInterceptor>();
+        responseInterceptors.add(new ResponseContent());
+        responseInterceptors.add(new ResponseBasicUnauthorized());
+        ImmutableHttpProcessor httpproc = new ImmutableHttpProcessor(requestInterceptors, responseInterceptors);
         return httpproc;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCompressionTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCompressionTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCompressionTest.java
index 4d52668..2feab44 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCompressionTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpCompressionTest.java
@@ -19,7 +19,9 @@ package org.apache.camel.component.http4;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
@@ -39,9 +41,11 @@ import org.apache.http.HttpResponseInterceptor;
 import org.apache.http.HttpStatus;
 import org.apache.http.entity.HttpEntityWrapper;
 import org.apache.http.localserver.LocalTestServer;
+import org.apache.http.localserver.ResponseBasicUnauthorized;
 import org.apache.http.message.BasicHeader;
-import org.apache.http.protocol.BasicHttpProcessor;
 import org.apache.http.protocol.HttpContext;
+import org.apache.http.protocol.HttpProcessor;
+import org.apache.http.protocol.ImmutableHttpProcessor;
 import org.apache.http.util.EntityUtils;
 import org.junit.Test;
 
@@ -74,12 +78,13 @@ public class HttpCompressionTest extends BaseHttpTest {
     }
 
     @Override
-    protected BasicHttpProcessor getBasicHttpProcessor() {
-        BasicHttpProcessor httpproc = new BasicHttpProcessor();
-        httpproc.addInterceptor(new RequestDecompressingInterceptor());
-
-        httpproc.addInterceptor(new ResponseCompressingInterceptor());
-
+    protected HttpProcessor getBasicHttpProcessor() {
+        List<HttpRequestInterceptor> requestInterceptors = new ArrayList<HttpRequestInterceptor>();
+        requestInterceptors.add(new RequestDecompressingInterceptor());
+        List<HttpResponseInterceptor> responseInterceptors = new ArrayList<HttpResponseInterceptor>();
+        responseInterceptors.add(new ResponseCompressingInterceptor());
+        responseInterceptors.add(new ResponseBasicUnauthorized());
+        ImmutableHttpProcessor httpproc = new ImmutableHttpProcessor(requestInterceptors, responseInterceptors);
         return httpproc;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeTest.java
index 2c42a84..601e89b 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProducerContentTypeTest.java
@@ -18,7 +18,6 @@
 package org.apache.camel.component.http4;
 
 import java.io.IOException;
-import java.util.List;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProxyServerTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProxyServerTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProxyServerTest.java
index b92f313..1d7a449 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProxyServerTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpProxyServerTest.java
@@ -17,7 +17,9 @@
 package org.apache.camel.component.http4;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.camel.Exchange;
@@ -39,10 +41,11 @@ import org.apache.http.HttpStatus;
 import org.apache.http.ProtocolException;
 import org.apache.http.auth.AUTH;
 import org.apache.http.client.HttpClient;
-import org.apache.http.conn.params.ConnRoutePNames;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.localserver.LocalTestServer;
-import org.apache.http.protocol.BasicHttpProcessor;
 import org.apache.http.protocol.HttpContext;
+import org.apache.http.protocol.ImmutableHttpProcessor;
 import org.apache.http.protocol.ResponseContent;
 import org.junit.After;
 import org.junit.Before;
@@ -62,11 +65,13 @@ public class HttpProxyServerTest extends BaseHttpTest {
     @Before
     public void setUp() throws Exception {
         super.setUp();
-
-        BasicHttpProcessor httpproc = new BasicHttpProcessor();
-        httpproc.addInterceptor(new RequestProxyBasicAuth());
-        httpproc.addInterceptor(new ResponseContent());
-        httpproc.addInterceptor(new ResponseProxyBasicUnauthorized());
+        
+        List<HttpRequestInterceptor> requestInterceptors = new ArrayList<HttpRequestInterceptor>();
+        requestInterceptors.add(new RequestProxyBasicAuth());
+        List<HttpResponseInterceptor> responseInterceptors = new ArrayList<HttpResponseInterceptor>();
+        responseInterceptors.add(new ResponseContent());
+        responseInterceptors.add(new ResponseProxyBasicUnauthorized());
+        ImmutableHttpProcessor httpproc = new ImmutableHttpProcessor(requestInterceptors, responseInterceptors);
 
         proxy = new LocalTestServer(httpproc, null);
         proxy.start();
@@ -86,16 +91,7 @@ public class HttpProxyServerTest extends BaseHttpTest {
     public void testDifferentHttpProxyConfigured() throws Exception {
         HttpEndpoint http1 = context.getEndpoint("http4://www.google.com?proxyAuthHost=myproxy&proxyAuthPort=1234", HttpEndpoint.class);
         HttpEndpoint http2 = context.getEndpoint("http4://www.google.com?test=parameter&proxyAuthHost=myotherproxy&proxyAuthPort=2345", HttpEndpoint.class);
-
-        HttpClient client1 = http1.createHttpClient();
-        HttpHost proxy1 = (HttpHost)client1.getParams().getParameter(ConnRoutePNames.DEFAULT_PROXY);
-        assertEquals("myproxy", proxy1.getHostName());
-        assertEquals(1234, proxy1.getPort());
-        
-        HttpClient client2 = http2.createHttpClient();
-        HttpHost proxy2 = (HttpHost)client2.getParams().getParameter(ConnRoutePNames.DEFAULT_PROXY);
-        assertEquals("myotherproxy", proxy2.getHostName());
-        assertEquals(2345, proxy2.getPort());
+        // HttpClientBuilder doesn't support get the configuration here
         
         //As the endpointUri is recreated, so the parameter could be in different place, so we use the URISupport.normalizeUri
         assertEquals("Get a wrong endpoint uri of http1", "http4://www.google.com?proxyAuthHost=myproxy&proxyAuthPort=1234", URISupport.normalizeUri(http1.getEndpointUri()));
@@ -104,25 +100,6 @@ public class HttpProxyServerTest extends BaseHttpTest {
         assertEquals("Should get the same EndpointKey", http1.getEndpointKey(), http2.getEndpointKey());
     }
     
-    @Test
-    public void testhttpGetProxyScheme() throws Exception {
-        context.getProperties().put("http.proxyHost", "myProxy");
-        context.getProperties().put("http.proxyPort", "1234");
-        context.getProperties().put("http.proxyScheme", "http");
-        try {
-            HttpEndpoint http1 = context.getEndpoint("https4://www.google.com", HttpEndpoint.class);
-            
-            HttpClient client1 = http1.createHttpClient();
-            HttpHost proxy1 = (HttpHost)client1.getParams().getParameter(ConnRoutePNames.DEFAULT_PROXY);
-            assertEquals("myProxy", proxy1.getHostName());
-            assertEquals(1234, proxy1.getPort());
-            assertEquals("http", proxy1.getSchemeName());
-        } finally {
-            context.getProperties().remove("http.proxyHost");
-            context.getProperties().remove("http.proxyPort");
-            context.getProperties().remove("http.proxyScheme");
-        }
-    }
 
     @Test
     public void httpGetWithProxyAndWithoutUser() throws Exception {
@@ -217,7 +194,7 @@ public class HttpProxyServerTest extends BaseHttpTest {
     private int getProxyPort() {
         return proxy.getServiceAddress().getPort();
     }
-
+    
     class RequestProxyBasicAuth implements HttpRequestInterceptor {
         public void process(final HttpRequest request, final HttpContext context) throws HttpException, IOException {
             String auth = null;

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpRedirectTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpRedirectTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpRedirectTest.java
index 5c2a9b5..1251e13 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpRedirectTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpRedirectTest.java
@@ -40,8 +40,8 @@ public class HttpRedirectTest extends BaseHttpTest {
         localServer.register("/test", new RedirectHandler(HttpStatus.SC_MOVED_PERMANENTLY));
 
         String uri = "http4://" + getHostName() + ":" + getPort()
-                + "/test?httpClient.handleRedirects=false&httpClient.soTimeout=60000&httpClient.connectionTimeout=60000"
-                + "&httpClient.staleCheckingEnabled=false";
+                + "/test?httpClient.redirectsEnabled=false&httpClient.socketTimeout=60000&httpClient.connectTimeout=60000"
+                + "&httpClient.staleConnectionCheckEnabled=false";
         Exchange out = template.request(uri, new Processor() {
             public void process(Exchange exchange) throws Exception {
                 // no data
@@ -62,8 +62,8 @@ public class HttpRedirectTest extends BaseHttpTest {
         localServer.register("/someplaceelse", new BasicValidationHandler("GET", null, null, "Bye World"));
 
         String uri = "http4://" + getHostName() + ":" + getPort()
-                + "/test?httpClient.soTimeout=60000&httpClient.connectionTimeout=60000"
-                + "&httpClient.staleCheckingEnabled=false";
+                + "/test?httpClient.socketTimeout=60000&httpClient.connectTimeout=60000"
+                + "&httpClient.staleConnectionCheckEnabled=false";
         Exchange out = template.request(uri, new Processor() {
             public void process(Exchange exchange) throws Exception {
                 // no data

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpReferenceParameterTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpReferenceParameterTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpReferenceParameterTest.java
index 2baaa24..10781f1 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpReferenceParameterTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpReferenceParameterTest.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.http4;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.test.junit4.CamelTestSupport;
-import org.apache.http.client.HttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
 import org.apache.http.protocol.BasicHttpContext;
 import org.apache.http.protocol.HttpContext;
 import org.junit.Test;
@@ -94,7 +94,7 @@ public class HttpReferenceParameterTest extends CamelTestSupport {
 
     private static class TestClientConfigurer implements HttpClientConfigurer {
 
-        public void configureHttpClient(HttpClient client) {
+        public void configureHttpClient(HttpClientBuilder clientBuilder) {
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java
index a315409..f2b17b0 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpSOTimeoutTest.java
@@ -30,7 +30,7 @@ public class HttpSOTimeoutTest extends BaseHttpTest {
 
     @Test
     public void httpGet() throws Exception {
-        Exchange exchange = template.request("http4://" + getHostName() + ":" + getPort() + "?httpClient.soTimeout=5000", new Processor() {
+        Exchange exchange = template.request("http4://" + getHostName() + ":" + getPort() + "?httpClient.SocketTimeout=5000", new Processor() {
             public void process(Exchange exchange) throws Exception {
             }
         });
@@ -40,7 +40,7 @@ public class HttpSOTimeoutTest extends BaseHttpTest {
 
     @Test
     public void httpGetShouldThrowASocketTimeoutException() throws Exception {
-        Exchange reply = template.request("http4://" + getHostName() + ":" + getPort() + "?httpClient.soTimeout=1000", new Processor() {
+        Exchange reply = template.request("http4://" + getHostName() + ":" + getPort() + "?httpClient.SocketTimeout=1000", new Processor() {
             public void process(Exchange exchange) throws Exception {
             }
         });

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpServerTestSupport.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpServerTestSupport.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpServerTestSupport.java
index aaf08df..4cec5d1 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpServerTestSupport.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpServerTestSupport.java
@@ -22,8 +22,8 @@ import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.http.ConnectionReuseStrategy;
 import org.apache.http.HttpResponseFactory;
 import org.apache.http.localserver.LocalTestServer;
-import org.apache.http.protocol.BasicHttpProcessor;
 import org.apache.http.protocol.HttpExpectationVerifier;
+import org.apache.http.protocol.HttpProcessor;
 import org.junit.After;
 import org.junit.Before;
 
@@ -68,9 +68,9 @@ public abstract class HttpServerTestSupport extends CamelTestSupport {
      * Returns the org.apache.http.protocol.BasicHttpProcessor which should be
      * used by the server.
      *
-     * @return basicHttpProcessor
+     * @return HttpProcessor
      */
-    protected BasicHttpProcessor getBasicHttpProcessor() {
+    protected HttpProcessor getBasicHttpProcessor() {
         return null;
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpWithHttpUriHeaderTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpWithHttpUriHeaderTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpWithHttpUriHeaderTest.java
index 4f5d791..45c27de 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpWithHttpUriHeaderTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpWithHttpUriHeaderTest.java
@@ -36,7 +36,6 @@ public class HttpWithHttpUriHeaderTest extends BaseHttpTest {
                 exchange.getIn().setHeader(Exchange.HTTP_URI, "http4://" + getHostName() + ":" + getPort() + "/");
             }
         });
-
         assertExchange(exchange);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsAuthenticationTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsAuthenticationTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsAuthenticationTest.java
index 1648177..abe552d 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsAuthenticationTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsAuthenticationTest.java
@@ -16,14 +16,21 @@
  */
 package org.apache.camel.component.http4;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.component.http4.handler.AuthenticationValidationHandler;
 import org.apache.camel.impl.JndiRegistry;
+import org.apache.http.HttpRequestInterceptor;
+import org.apache.http.HttpResponseInterceptor;
 import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
 import org.apache.http.localserver.RequestBasicAuth;
 import org.apache.http.localserver.ResponseBasicUnauthorized;
-import org.apache.http.protocol.BasicHttpProcessor;
+
+import org.apache.http.protocol.HttpProcessor;
+import org.apache.http.protocol.ImmutableHttpProcessor;
 import org.apache.http.protocol.ResponseContent;
 import org.junit.Test;
 
@@ -57,13 +64,14 @@ public class HttpsAuthenticationTest extends BaseHttpsTest {
     }
 
     @Override
-    protected BasicHttpProcessor getBasicHttpProcessor() {
-        BasicHttpProcessor httpproc = new BasicHttpProcessor();
-        httpproc.addInterceptor(new RequestBasicAuth());
-
-        httpproc.addInterceptor(new ResponseContent());
-        httpproc.addInterceptor(new ResponseBasicUnauthorized());
-
+    protected HttpProcessor getBasicHttpProcessor() {
+        List<HttpRequestInterceptor> requestInterceptors = new ArrayList<HttpRequestInterceptor>();
+        requestInterceptors.add(new RequestBasicAuth());
+        List<HttpResponseInterceptor> responseInterceptors = new ArrayList<HttpResponseInterceptor>();
+        responseInterceptors.add(new ResponseContent());
+        responseInterceptors.add(new ResponseBasicUnauthorized());
+        ImmutableHttpProcessor httpproc = new ImmutableHttpProcessor(requestInterceptors, responseInterceptors);
+       
         return httpproc;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsTwoDifferentSslContextParametersGetTest.java
----------------------------------------------------------------------
diff --git a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsTwoDifferentSslContextParametersGetTest.java b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsTwoDifferentSslContextParametersGetTest.java
index 43c7a24..c98ef31 100644
--- a/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsTwoDifferentSslContextParametersGetTest.java
+++ b/components/camel-http4/src/test/java/org/apache/camel/component/http4/HttpsTwoDifferentSslContextParametersGetTest.java
@@ -21,8 +21,10 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.util.jsse.SSLContextParameters;
 import org.apache.http.conn.ssl.AllowAllHostnameVerifier;
+import org.junit.Ignore;
 import org.junit.Test;
 
+@Ignore("Now we support to set sslContextParameters on different endpoints")
 public class HttpsTwoDifferentSslContextParametersGetTest extends BaseHttpsTest {
     
     @Override

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/tests/camel-itest/src/test/java/org/apache/camel/itest/http/Http4RouteTest.java
----------------------------------------------------------------------
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/http/Http4RouteTest.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/http/Http4RouteTest.java
index c4160a9..e6d35a4 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/http/Http4RouteTest.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/http/Http4RouteTest.java
@@ -30,7 +30,7 @@ public class Http4RouteTest extends CamelTestSupport {
     @Test
     public void sendHttpGetRequestTest() {
         String response = template.requestBody("http4://localhost:" + port 
-                         + "/test?aa=bb&httpClient.soTimeout=10000&httpClient.connectionTimeout=10000"
+                         + "/test?aa=bb&httpClient.socketTimeout=10000&httpClient.connectTimeout=10000"
                          + "&bridgeEndpoint=true&throwExceptionOnFailure=false" , null, String.class);
         assertEquals("aa=bb", response);
     }

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4EndpointTest-context.xml
----------------------------------------------------------------------
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4EndpointTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4EndpointTest-context.xml
index f9abedd..66bce44 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4EndpointTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4EndpointTest-context.xml
@@ -28,38 +28,16 @@
     
     <bean id="httpEndpoint" class="org.apache.camel.component.http4.HttpEndpoint">
         <property name="httpUri" value="http://127.0.0.1:${HttpTestServer.Port}/"/>
-        <property name="clientParams" ref="clientParams"/>
-        <property name="clientConnectionManager" ref="clientConnectionManager"/>
+        <property name="clientBuilder" ref="clientBuilder"/>
+        <property name="clientConnectionManager" ref="myManager"/>
     </bean>
-
-    <bean id="clientParams" class="org.apache.http.params.BasicHttpParams" />
-    
-    <bean id="clientConnectionManager" class="org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager">
-        <constructor-arg ref="clientParams"/>
-        <constructor-arg ref="schemeRegistry"/>
-    </bean>
-    
-    <bean id="plainSocketFactory" class="org.apache.http.conn.scheme.PlainSocketFactory" factory-method="getSocketFactory" />
     
-    <bean id="http" class="org.apache.http.conn.scheme.Scheme">
-    	<constructor-arg value="http" />
-    	<constructor-arg>
-    		<bean class="org.apache.http.conn.scheme.PlainSocketFactory" factory-method="getSocketFactory" />
-    	</constructor-arg>
-    	<constructor-arg value="80" />
-    </bean>
+    <bean id="myManager" class="org.apache.http.impl.conn.PoolingHttpClientConnectionManager"/>
+
+    <!-- You can set the client configuration by setting up the builder class -->
+    <bean id="clientBuilder" class="org.apache.http.impl.client.HttpClientBuilder" />
     
-    <bean id="schemeRegistry" class="org.apache.http.conn.scheme.SchemeRegistry" />
     
-    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-    	<property name="targetObject" ref="schemeRegistry"/>
-		<property name="targetMethod" value="register"/>
-    	<property name="arguments">
-    		<list>
-    			<ref bean="http"/>
-    		</list>
-    	</property>
-    </bean>
     <!-- END SNIPPET: e1 -->
 
     <!-- START SNIPPET: e2 -->

http://git-wip-us.apache.org/repos/asf/camel/blob/7e65a14d/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4MaxConnectionPerHostTest-context.xml
----------------------------------------------------------------------
diff --git a/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4MaxConnectionPerHostTest-context.xml b/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4MaxConnectionPerHostTest-context.xml
index e2e97a6..1287de6 100644
--- a/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4MaxConnectionPerHostTest-context.xml
+++ b/tests/camel-itest/src/test/resources/org/apache/camel/itest/http/Http4MaxConnectionPerHostTest-context.xml
@@ -27,39 +27,9 @@
     <bean id="properties" class="org.apache.camel.component.properties.PropertiesComponent"/>
     <bean id="httpComponent" class="org.apache.camel.component.http4.HttpComponent">
         <property name="camelContext" ref="camel"/>
-        <property name="clientConnectionManager" ref="clientConnectionManager"/>
         <property name="connectionsPerRoute" value="5" />
     </bean>
 
-    <bean id="clientConnectionManager" class="org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager">
-        <constructor-arg ref="clientParams"/>
-        <constructor-arg ref="schemeRegistry"/>
-    </bean>
-
-    <bean id="clientParams" class="org.apache.http.params.BasicHttpParams" />
-    
-    <bean id="plainSocketFactory" class="org.apache.http.conn.scheme.PlainSocketFactory" factory-method="getSocketFactory" />
-    
-    <bean id="http" class="org.apache.http.conn.scheme.Scheme">
-    	<constructor-arg value="http" />
-    	<constructor-arg>
-    		<bean class="org.apache.http.conn.scheme.PlainSocketFactory" factory-method="getSocketFactory" />
-    	</constructor-arg>
-    	<constructor-arg value="80" />
-    </bean>
-    
-    <bean id="schemeRegistry" class="org.apache.http.conn.scheme.SchemeRegistry" />
-    
-    <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
-    	<property name="targetObject" ref="schemeRegistry"/>
-		<property name="targetMethod" value="register"/>
-    	<property name="arguments">
-    		<list>
-    			<ref bean="http"/>
-    		</list>
-    	</property>
-    </bean>
-
     <!-- END SNIPPET: e1 -->
 
     <!-- START SNIPPET: e2 -->