You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2013/10/22 05:04:45 UTC

[7/9] git commit: Refactored configuration code; HttpClient instance is now immutable and static

Refactored configuration code; HttpClient instance is now immutable and static


Project: http://git-wip-us.apache.org/repos/asf/maven-wagon/repo
Commit: http://git-wip-us.apache.org/repos/asf/maven-wagon/commit/e198f011
Tree: http://git-wip-us.apache.org/repos/asf/maven-wagon/tree/e198f011
Diff: http://git-wip-us.apache.org/repos/asf/maven-wagon/diff/e198f011

Branch: refs/heads/master
Commit: e198f0110df4b7ca0cface82806624ed5ad1dcb9
Parents: 70e4261
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Tue Sep 24 20:25:12 2013 +0200
Committer: Oleg Kalnichevski <ol...@apache.org>
Committed: Tue Sep 24 20:25:12 2013 +0200

----------------------------------------------------------------------
 .../providers/http/AbstractHttpClientWagon.java | 125 +++++++++----------
 .../providers/http/HttpMethodConfiguration.java |   8 +-
 .../providers/http/HttpClientWagonTest.java     |   4 +-
 3 files changed, 67 insertions(+), 70 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/e198f011/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java
----------------------------------------------------------------------
diff --git a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java
index 8df1404..0a7e59d 100755
--- a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java
+++ b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/AbstractHttpClientWagon.java
@@ -54,6 +54,7 @@ import org.apache.http.auth.NTCredentials;
 import org.apache.http.auth.UsernamePasswordCredentials;
 import org.apache.http.client.AuthCache;
 import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.config.CookieSpecs;
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
@@ -101,8 +102,6 @@ import org.codehaus.plexus.util.StringUtils;
 public abstract class AbstractHttpClientWagon
     extends StreamWagon
 {
-    private static String defaultUserAgent;
-
     private final class RequestEntityImplementation
         extends AbstractHttpEntity
     {
@@ -223,12 +222,6 @@ public abstract class AbstractHttpClientWagon
 
     private static final TimeZone GMT_TIME_ZONE = TimeZone.getTimeZone( "GMT" );
 
-    private CloseableHttpClient client;
-
-    private HttpClientContext localContext;
-
-    private Closeable closeable;
-
     /**
      * use http(s) connection pool mechanism.
      * <b>enabled by default</b>
@@ -275,7 +268,7 @@ public abstract class AbstractHttpClientWagon
     /**
      * Internal connection manager
      */
-    private static final PoolingHttpClientConnectionManager connManager = createConnManager();
+    private static final PoolingHttpClientConnectionManager CONN_MAN = createConnManager();
 
     private static PoolingHttpClientConnectionManager createConnManager()
     {
@@ -328,6 +321,46 @@ public abstract class AbstractHttpClientWagon
         return connManager;
     }
 
+    private static CloseableHttpClient CLIENT = createClient();
+
+    private static CloseableHttpClient createClient() {
+        return HttpClientBuilder.create()
+                    .useSystemProperties()
+                    .disableConnectionState()
+                    .setConnectionManager(CONN_MAN)
+                    .build();
+    }
+
+    private static String DEFAULT_USER_AGENT = getDefaultUserAgent();
+
+    private static String getDefaultUserAgent()
+    {
+        Properties props = new Properties();
+
+        InputStream is = AbstractHttpClientWagon.class.getResourceAsStream("/META-INF/maven/org.apache.maven.wagon/wagon-http/pom.properties");
+        if ( is != null )
+        {
+            try
+            {
+                props.load( is );
+            }
+            catch ( IOException ignore )
+            {
+            }
+            finally
+            {
+                IOUtil.close( is );
+            }
+        }
+
+        String ver = props.getProperty( "version", "unknown-version" );
+        return "Apache-Maven-Wagon/" + ver + " (Java " + System.getProperty( "java.version" ) + "; ";
+    }
+
+    private HttpClientContext localContext;
+
+    private Closeable closeable;
+
     /**
      * @plexus.configuration
      * @deprecated Use httpConfiguration instead.
@@ -373,20 +406,16 @@ public abstract class AbstractHttpClientWagon
             }
         }
 
-        HttpHost proxy = null;
         ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() );
         if ( proxyInfo != null )
         {
             String proxyUsername = proxyInfo.getUserName();
             String proxyPassword = proxyInfo.getPassword();
             String proxyHost = proxyInfo.getHost();
-            int proxyPort = proxyInfo.getPort();
             String proxyNtlmHost = proxyInfo.getNtlmHost();
             String proxyNtlmDomain = proxyInfo.getNtlmDomain();
             if ( proxyHost != null )
             {
-                proxy = new HttpHost( proxyHost, proxyPort );
-
                 if ( proxyUsername != null && proxyPassword != null )
                 {
                     Credentials creds;
@@ -408,21 +437,14 @@ public abstract class AbstractHttpClientWagon
         }
 
         localContext = HttpClientContext.create();
-
-        client = HttpClientBuilder.create()
-                .useSystemProperties()
-                .disableConnectionState()
-                .setConnectionManager(connManager)
-                .setProxy(proxy)
-                .setDefaultCredentialsProvider(credentialsProvider)
-                .build();
+        localContext.setCredentialsProvider(credentialsProvider);
     }
 
     public void closeConnection()
     {
         if ( !PERSISTENT_POOL)
         {
-            connManager.closeIdleConnections(0, TimeUnit.MILLISECONDS);
+            CONN_MAN.closeIdleConnections(0, TimeUnit.MILLISECONDS);
         }
     }
 
@@ -664,11 +686,23 @@ public abstract class AbstractHttpClientWagon
             httpMethod.setHeader(HTTP.USER_AGENT, userAgent);
         }
 
+        RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
+        // WAGON-273: default the cookie-policy to browser compatible
+        requestConfigBuilder.setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY);
+
+        ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() );
+        if ( proxyInfo != null )
+        {
+            HttpHost proxy = new HttpHost( proxyInfo.getHost(), proxyInfo.getPort() );
+            requestConfigBuilder.setProxy( proxy );
+        }
+
         HttpMethodConfiguration config =
-            httpConfiguration == null ? null : httpConfiguration.getMethodConfiguration( httpMethod );
+            httpConfiguration == null ? null : httpConfiguration.getMethodConfiguration(httpMethod);
+
         if ( config != null )
         {
-            localContext.setRequestConfig( config.asRequestConfig() );
+            config.applyConfig(requestConfigBuilder);
 
             if ( config.isUsePreemptive() && authenticationInfo != null )
             {
@@ -691,13 +725,10 @@ public abstract class AbstractHttpClientWagon
         }
         else
         {
-            RequestConfig requestConfig = RequestConfig.custom()
-                    .setSocketTimeout( getReadTimeout() )
-                    .build();
-            localContext.setRequestConfig( requestConfig );
+            requestConfigBuilder.setSocketTimeout( getReadTimeout() );
         }
 
-        ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() );
+        localContext.setRequestConfig( requestConfigBuilder.build() );
 
         if ( proxyInfo != null )
         {
@@ -721,7 +752,7 @@ public abstract class AbstractHttpClientWagon
 
         }
 
-        return client.execute( httpMethod, localContext );
+        return CLIENT.execute( httpMethod, localContext );
     }
 
     protected void setHeaders( HttpUriRequest method )
@@ -736,7 +767,7 @@ public abstract class AbstractHttpClientWagon
             method.addHeader( "Pragma", "no-cache" );
             method.addHeader( "Expires", "0" );
             method.addHeader( "Accept-Encoding", "gzip" );
-            method.addHeader( "User-Agent", getDefaultUserAgent() );
+            method.addHeader( "User-Agent", DEFAULT_USER_AGENT );
         }
 
         if ( httpHeaders != null )
@@ -757,38 +788,6 @@ public abstract class AbstractHttpClientWagon
         }
     }
 
-    private String getDefaultUserAgent()
-    {
-        if ( defaultUserAgent == null )
-        {
-            defaultUserAgent =
-                "Apache-Maven-Wagon/" + getWagonVersion() + " (Java " + System.getProperty( "java.version" ) + "; "
-                    + System.getProperty( "os.name" ) + " " + System.getProperty( "os.version" ) + ")";
-        }
-        return defaultUserAgent;
-    }
-
-    private String getWagonVersion()
-    {
-        Properties props = new Properties();
-
-        InputStream is = getClass().getResourceAsStream( "/META-INF/maven/org.apache.maven.wagon/wagon-http/pom.properties" );
-        if ( is != null )
-        {
-            try
-            {
-                props.load( is );
-            }
-            catch ( IOException e )
-            {
-                // ignore
-            }
-            IOUtil.close( is );
-        }
-
-        return props.getProperty( "version", "unknown-version" );
-    }
-
     protected String getUserAgent( HttpUriRequest method )
     {
         if ( httpHeaders != null )

http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/e198f011/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpMethodConfiguration.java
----------------------------------------------------------------------
diff --git a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpMethodConfiguration.java b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpMethodConfiguration.java
index 1d10c49..a1341eb 100755
--- a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpMethodConfiguration.java
+++ b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpMethodConfiguration.java
@@ -146,15 +146,12 @@ public class HttpMethodConfiguration
 
     private static final String COERCE_PATTERN = "%(\\w+),(.+)";
 
-    public RequestConfig asRequestConfig()
+    public void applyConfig(RequestConfig.Builder builder)
     {
         if ( !hasParams() )
         {
-            return null;
+            return;
         }
-        RequestConfig.Builder builder = RequestConfig.custom();
-        // WAGON-273: default the cookie-policy to browser compatible
-        builder.setCookieSpec(CookieSpecs.BROWSER_COMPATIBILITY);
         if ( connectionTimeout > 0 )
         {
             builder.setConnectTimeout(connectionTimeout);
@@ -244,7 +241,6 @@ public class HttpMethodConfiguration
                 }
             }
         }
-        return builder.build();
     }
 
     private boolean hasParams()

http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/e198f011/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java
----------------------------------------------------------------------
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java
index 95683cd..01a130c 100755
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpClientWagonTest.java
@@ -42,7 +42,9 @@ public class HttpClientWagonTest
         config.setAll(methodConfig);
 
         HttpHead method = new HttpHead();
-        RequestConfig requestConfig = config.getMethodConfiguration(method).asRequestConfig();
+        RequestConfig.Builder builder = RequestConfig.custom();
+        config.getMethodConfiguration(method).applyConfig( builder );
+        RequestConfig requestConfig = builder.build();
 
         assertEquals(2, requestConfig.getMaxRedirects());
     }