You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by ve...@apache.org on 2017/01/28 14:19:17 UTC

svn commit: r1780692 - in /axis/axis2/java/core/trunk: modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/ src/site/markdown/release-notes/

Author: veithen
Date: Sat Jan 28 14:19:17 2017
New Revision: 1780692

URL: http://svn.apache.org/viewvc?rev=1780692&view=rev
Log:
Completely upgrade to the APIs supported by the latest HTTPClient 4.x version.

Modified:
    axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java
    axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
    axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java
    axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md

Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java?rev=1780692&r1=1780691&r2=1780692&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java (original)
+++ axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPProxyConfigurator.java Sat Jan 28 14:19:17 2017
@@ -33,8 +33,12 @@ 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.CredentialsProvider;
 import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.protocol.HttpClientContext;
 import org.apache.http.impl.client.AbstractHttpClient;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
 
 import javax.xml.namespace.QName;
 import java.net.URL;
@@ -57,12 +61,14 @@ public class HTTPProxyConfigurator {
      *
      * @param messageContext
      *            in message context for
-     * @param httpClient
-     *            instance
+     * @param requestConfig
+     *            the request configuration to fill in
+     * @param clientContext
+     *            the HTTP client context
      * @throws org.apache.axis2.AxisFault
      *             if Proxy settings are invalid
      */
-    public static void configure(MessageContext messageContext, AbstractHttpClient httpClient, RequestConfig.Builder requestConfig)
+    public static void configure(MessageContext messageContext, RequestConfig.Builder requestConfig, HttpClientContext clientContext)
             throws AxisFault {
 
         Credentials proxyCredentials = null;
@@ -142,8 +148,12 @@ public class HTTPProxyConfigurator {
         if (proxyCredentials != null) {
             // TODO : Set preemptive authentication, but its not recommended in HC 4
             requestConfig.setAuthenticationEnabled(true);
-
-            httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, proxyCredentials);
+            CredentialsProvider credsProvider = clientContext.getCredentialsProvider();
+            if (credsProvider == null) {
+                credsProvider = new BasicCredentialsProvider();
+                clientContext.setCredentialsProvider(credsProvider);
+            }
+            credsProvider.setCredentials(AuthScope.ANY, proxyCredentials);
             HttpHost proxy = new HttpHost(proxyHost, proxyPort);
             requestConfig.setProxy(proxy);
 

Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java?rev=1780692&r1=1780691&r2=1780692&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/HTTPSenderImpl.java Sat Jan 28 14:19:17 2017
@@ -28,15 +28,15 @@ import org.apache.axis2.transport.http.H
 import org.apache.axis2.transport.http.Request;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
-import org.apache.http.client.params.AuthPolicy;
-import org.apache.http.conn.ClientConnectionManager;
-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.conn.ssl.SSLSocketFactory;
-import org.apache.http.impl.client.AbstractHttpClient;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
+import org.apache.http.client.HttpClient;
+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.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 
 import java.net.URL;
 
@@ -50,14 +50,14 @@ public class HTTPSenderImpl extends HTTP
         return new RequestImpl(getHttpClient(msgContext), msgContext, methodName, url, requestEntity);
     }
 
-    private AbstractHttpClient getHttpClient(MessageContext msgContext) {
+    private HttpClient getHttpClient(MessageContext msgContext) {
         ConfigurationContext configContext = msgContext.getConfigurationContext();
 
-        AbstractHttpClient httpClient = (AbstractHttpClient) msgContext
+        HttpClient httpClient = (HttpClient) msgContext
                 .getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
 
         if (httpClient == null) {
-            httpClient = (AbstractHttpClient) configContext.
+            httpClient = (HttpClient) configContext.
                     getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
         }
 
@@ -66,11 +66,11 @@ public class HTTPSenderImpl extends HTTP
         }
 
         synchronized (this) {
-            httpClient = (AbstractHttpClient) msgContext.
+            httpClient = (HttpClient) msgContext.
                     getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
 
             if (httpClient == null) {
-                httpClient = (AbstractHttpClient) configContext
+                httpClient = (HttpClient) configContext
                         .getProperty(HTTPConstants.CACHED_HTTP_CLIENT);
             }
 
@@ -78,28 +78,27 @@ public class HTTPSenderImpl extends HTTP
                 return httpClient;
             }
 
-            ClientConnectionManager connManager = (ClientConnectionManager) msgContext
+            HttpClientConnectionManager connManager = (HttpClientConnectionManager) msgContext
                     .getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
             if (connManager == null) {
-                connManager = (ClientConnectionManager) msgContext
+                connManager = (HttpClientConnectionManager) msgContext
                         .getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
             }
             if (connManager == null) {
                 // reuse HttpConnectionManager
                 synchronized (configContext) {
-                    connManager = (ClientConnectionManager) configContext
+                    connManager = (HttpClientConnectionManager) configContext
                             .getProperty(HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER);
                     if (connManager == null) {
                         log.trace("Making new ConnectionManager");
-                        SchemeRegistry schemeRegistry = new SchemeRegistry();
-                        schemeRegistry.register(
-                                new Scheme("http", 80, PlainSocketFactory.getSocketFactory()));
-                        schemeRegistry.register(
-                                new Scheme("https", 443, SSLSocketFactory.getSocketFactory()));
-
-                        connManager = new PoolingClientConnectionManager(schemeRegistry);
-                        ((PoolingClientConnectionManager)connManager).setMaxTotal(200);
-                        ((PoolingClientConnectionManager)connManager).setDefaultMaxPerRoute(200);
+                        Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
+                                .register("http", PlainConnectionSocketFactory.getSocketFactory())
+                                .register("https", SSLConnectionSocketFactory.getSocketFactory())
+                                .build();
+
+                        connManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
+                        ((PoolingHttpClientConnectionManager)connManager).setMaxTotal(200);
+                        ((PoolingHttpClientConnectionManager)connManager).setDefaultMaxPerRoute(200);
                         configContext.setProperty(
                                 HTTPConstants.MULTITHREAD_HTTP_CONNECTION_MANAGER, connManager);
                     }
@@ -109,12 +108,10 @@ public class HTTPSenderImpl extends HTTP
              * Create a new instance of HttpClient since the way it is used here
              * it's not fully thread-safe.
              */
-            httpClient = new DefaultHttpClient(connManager);
-
-            //We don't need to set timeout for connection manager, since we are doing it below
-            // and its enough
-
-            return httpClient;
+            return HttpClientBuilder.create()
+                    .setConnectionManager(connManager)
+                    .setConnectionManagerShared(true)
+                    .build();
         }
     }
 

Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java?rev=1780692&r1=1780691&r2=1780692&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java (original)
+++ axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/impl/httpclient4/RequestImpl.java Sat Jan 28 14:19:17 2017
@@ -46,14 +46,14 @@ 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.CredentialsProvider;
+import org.apache.http.client.HttpClient;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
 import org.apache.http.client.methods.HttpRequestBase;
 import org.apache.http.client.params.AuthPolicy;
-import org.apache.http.impl.auth.NTLMSchemeFactory;
-import org.apache.http.impl.client.AbstractHttpClient;
-import org.apache.http.protocol.BasicHttpContext;
-import org.apache.http.protocol.HttpContext;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.impl.client.BasicCredentialsProvider;
 import org.apache.http.util.EntityUtils;
 
 final class RequestImpl implements Request {
@@ -61,15 +61,16 @@ final class RequestImpl implements Reque
     
     private static final Log log = LogFactory.getLog(RequestImpl.class);
     
-    private final AbstractHttpClient httpClient;
+    private final HttpClient httpClient;
     private final MessageContext msgContext;
     private final URL url;
     private final HttpRequestBase method;
     private final HttpHost httpHost;
     private final RequestConfig.Builder requestConfig = RequestConfig.custom();
+    private final HttpClientContext clientContext = HttpClientContext.create();
     private HttpResponse response;
 
-    RequestImpl(AbstractHttpClient httpClient, MessageContext msgContext, final String methodName, URL url,
+    RequestImpl(HttpClient httpClient, MessageContext msgContext, final String methodName, URL url,
             AxisRequestEntity requestEntity) throws AxisFault {
         this.httpClient = httpClient;
         this.msgContext = msgContext;
@@ -206,9 +207,7 @@ final class RequestImpl implements Reque
 
         method.setConfig(requestConfig.build());
 
-        HttpContext localContext = new BasicHttpContext();
-        // Why do we have add context here
-        response = httpClient.execute(httpHost, method, localContext);
+        response = httpClient.execute(httpHost, method, clientContext);
     }
 
     @Override
@@ -238,7 +237,7 @@ final class RequestImpl implements Reque
             if (log.isDebugEnabled()) {
                 log.debug("Configuring HTTP proxy.");
             }
-            HTTPProxyConfigurator.configure(msgContext, httpClient, requestConfig);
+            HTTPProxyConfigurator.configure(msgContext, requestConfig, clientContext);
         }
     }
 
@@ -263,35 +262,35 @@ final class RequestImpl implements Reque
 
         // TODO : Set preemptive authentication, but its not recommended in HC 4
 
+        CredentialsProvider credsProvider = clientContext.getCredentialsProvider();
+        if (credsProvider == null) {
+            credsProvider = new BasicCredentialsProvider();
+            clientContext.setCredentialsProvider(credsProvider);
+        }
         if (host != null) {
             if (domain != null) {
                 /* Credentials for NTLM Authentication */
-                httpClient.getAuthSchemes().register("ntlm",new NTLMSchemeFactory());
                 creds = new NTCredentials(username, password, host, domain);
             } else {
                 /* Credentials for Digest and Basic Authentication */
                 creds = new UsernamePasswordCredentials(username, password);
             }
-            httpClient.getCredentialsProvider().
-                    setCredentials(new AuthScope(host, port, realm), creds);
+            credsProvider.setCredentials(new AuthScope(host, port, realm), creds);
         } else {
             if (domain != null) {
                 /*
                  * Credentials for NTLM Authentication when host is
                  * ANY_HOST
                  */
-                httpClient.getAuthSchemes().register("ntlm",new NTLMSchemeFactory());
                 creds = new NTCredentials(username, password, AuthScope.ANY_HOST, domain);
-                httpClient.getCredentialsProvider().
-                        setCredentials(new AuthScope(AuthScope.ANY_HOST, port, realm),
-                                       creds);
+                credsProvider.setCredentials(new AuthScope(AuthScope.ANY_HOST, port, realm), creds);
             } else {
                 /* Credentials only for Digest and Basic Authentication */
                 creds = new UsernamePasswordCredentials(username, password);
-                httpClient.getCredentialsProvider().
-                        setCredentials(new AuthScope(AuthScope.ANY), creds);
+                credsProvider.setCredentials(new AuthScope(AuthScope.ANY), creds);
             }
         }
+        
         /* Customizing the priority Order */
         List schemes = authenticator.getAuthSchemes();
         if (schemes != null && schemes.size() > 0) {

Modified: axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md?rev=1780692&r1=1780691&r2=1780692&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md (original)
+++ axis/axis2/java/core/trunk/src/site/markdown/release-notes/1.8.0.md Sat Jan 28 14:19:17 2017
@@ -6,3 +6,6 @@ Apache Axis2 1.8.0 Release Note
 *   The Apache Commons HttpClient 3.x based HTTP transport has been deprecated.
     If you wish to continue using this transport, add `axis2-transport-http-hc3`
     to your project.
+
+*   The HTTPClient 4.x based transport has been upgraded to use the APIs supported
+    by the latest HTTPClient version.