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/09/20 02:34:02 UTC

git commit: Wagon HTTP upgraded to HttpClient 4.3

Updated Branches:
  refs/heads/master 788920f93 -> a12972eba


Wagon HTTP upgraded to HttpClient 4.3


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

Branch: refs/heads/master
Commit: a12972eba960cf07505472eebefaede75490bcd9
Parents: 788920f
Author: Oleg Kalnichevski <ol...@apache.org>
Authored: Wed Sep 18 22:06:13 2013 +0200
Committer: Olivier Lamy <ol...@apache.org>
Committed: Fri Sep 20 10:33:51 2013 +1000

----------------------------------------------------------------------
 wagon-providers/pom.xml                         |   4 +-
 .../providers/http/AbstractHttpClientWagon.java | 576 ++++++++++---------
 .../ConfigurableSSLSocketFactoryDecorator.java  |  88 ---
 .../providers/http/HttpMethodConfiguration.java | 137 ++++-
 .../maven/wagon/providers/http/HttpWagon.java   |  69 ++-
 .../providers/http/HttpClientWagonTest.java     |  36 +-
 .../wagon/providers/http/HttpWagonTest.java     |   8 +-
 7 files changed, 462 insertions(+), 456 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/a12972eb/wagon-providers/pom.xml
----------------------------------------------------------------------
diff --git a/wagon-providers/pom.xml b/wagon-providers/pom.xml
index f3a1c24..c1c2b97 100644
--- a/wagon-providers/pom.xml
+++ b/wagon-providers/pom.xml
@@ -50,12 +50,12 @@ under the License.
       <dependency>
         <groupId>org.apache.httpcomponents</groupId>
         <artifactId>httpclient</artifactId>
-        <version>4.2.5</version>
+        <version>4.3</version>
       </dependency>
       <dependency>
         <groupId>org.apache.httpcomponents</groupId>
         <artifactId>httpcore</artifactId>
-        <version>4.2.4</version>
+        <version>4.3</version>
       </dependency>
       <dependency>
         <groupId>org.apache.sshd</groupId>

http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/a12972eb/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
old mode 100644
new mode 100755
index 6fac842..51e0157
--- 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
@@ -20,6 +20,7 @@ package org.apache.maven.wagon.providers.http;
  */
 
 import java.io.ByteArrayInputStream;
+import java.io.Closeable;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
@@ -52,33 +53,34 @@ import org.apache.http.auth.Credentials;
 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.RequestConfig;
+import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.http.client.methods.HttpHead;
 import org.apache.http.client.methods.HttpPut;
 import org.apache.http.client.methods.HttpUriRequest;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.client.params.CookiePolicy;
-import org.apache.http.client.protocol.ClientContext;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.conn.params.ConnRoutePNames;
-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.client.protocol.HttpClientContext;
+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.conn.ssl.X509HostnameVerifier;
 import org.apache.http.entity.AbstractHttpEntity;
 import org.apache.http.impl.auth.BasicScheme;
 import org.apache.http.impl.client.BasicAuthCache;
-import org.apache.http.impl.client.DefaultHttpClient;
-import org.apache.http.impl.conn.BasicClientConnectionManager;
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
+import org.apache.http.impl.client.BasicCredentialsProvider;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.conn.BasicHttpClientConnectionManager;
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.apache.http.impl.cookie.DateParseException;
 import org.apache.http.impl.cookie.DateUtils;
 import org.apache.http.message.BasicHeader;
-import org.apache.http.params.CoreConnectionPNames;
-import org.apache.http.params.CoreProtocolPNames;
-import org.apache.http.params.HttpParams;
-import org.apache.http.protocol.BasicHttpContext;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.util.TextUtils;
 import org.apache.maven.wagon.InputData;
 import org.apache.maven.wagon.OutputData;
 import org.apache.maven.wagon.PathUtils;
@@ -103,8 +105,6 @@ public abstract class AbstractHttpClientWagon
 {
     private static String defaultUserAgent;
 
-    private BasicHttpContext localContext;
-
     private final class RequestEntityImplementation
         extends AbstractHttpEntity
     {
@@ -227,18 +227,22 @@ public abstract class AbstractHttpClientWagon
 
     protected static final TimeZone GMT_TIME_ZONE = TimeZone.getTimeZone( "GMT" );
 
-    private DefaultHttpClient client;
+    private CloseableHttpClient client;
+
+    private HttpClientContext localContext;
+
+    private Closeable closeable;
 
     /**
      * @since 2.0
      */
-    protected static ClientConnectionManager connectionManagerPooled;
+    protected static HttpClientConnectionManager connectionManagerPooled;
 
     /**
      * @since 2.0
      */
-    protected ClientConnectionManager clientConnectionManager =
-        new BasicClientConnectionManager( createSchemeRegistry() );
+    protected HttpClientConnectionManager clientConnectionManager = new BasicHttpClientConnectionManager(
+            createSocketFactoryRegistry() );
 
     /**
      * use http(s) connection pool mechanism.
@@ -276,18 +280,27 @@ public abstract class AbstractHttpClientWagon
     protected static boolean sslAllowAll =
         Boolean.valueOf( System.getProperty( "maven.wagon.http.ssl.allowall", "false" ) );
 
-    private static SchemeRegistry createSchemeRegistry()
+    private static String[] split(final String s) {
+        if (TextUtils.isBlank(s)) {
+            return null;
+        }
+        return s.split(" *, *");
+    }
+
+    private static Registry<ConnectionSocketFactory> createSocketFactoryRegistry()
     {
-        SchemeRegistry schemeRegistry = new SchemeRegistry();
-        schemeRegistry.register( new Scheme( "http", 80, PlainSocketFactory.getSocketFactory() ) );
-        SSLSocketFactory sslSocketFactory;
+        String[] sslProtocols = split(System.getProperty("https.protocols"));
+        String[] cipherSuites = split(System.getProperty("https.cipherSuites"));
+        SSLConnectionSocketFactory sslSocketFactory;
         if ( sslInsecure )
         {
             try
             {
-                sslSocketFactory = new SSLSocketFactory(
-                    RelaxedX509TrustManager.createRelaxedSSLContext(),
-                    sslAllowAll ? new RelaxedHostNameVerifier() : SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER );
+                sslSocketFactory = new SSLConnectionSocketFactory(
+                        RelaxedX509TrustManager.createRelaxedSSLContext(),
+                        sslProtocols,
+                        cipherSuites,
+                        sslAllowAll ? new RelaxedHostNameVerifier() : SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER );
             }
             catch ( IOException e )
             {
@@ -296,15 +309,16 @@ public abstract class AbstractHttpClientWagon
         }
         else
         {
-            sslSocketFactory = new SSLSocketFactory(
-                HttpsURLConnection.getDefaultSSLSocketFactory(),
-                SSLSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER );
+            sslSocketFactory = new SSLConnectionSocketFactory(
+                    HttpsURLConnection.getDefaultSSLSocketFactory(),
+                    sslProtocols,
+                    cipherSuites,
+                    SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER );
         }
-
-        Scheme httpsScheme = new Scheme( "https", 443, new ConfigurableSSLSocketFactoryDecorator( sslSocketFactory ) );
-        schemeRegistry.register( httpsScheme );
-
-        return schemeRegistry;
+        return RegistryBuilder.<ConnectionSocketFactory>create()
+                .register("http", PlainConnectionSocketFactory.INSTANCE)
+                .register("https", sslSocketFactory)
+                .build();
     }
 
     static
@@ -315,8 +329,8 @@ public abstract class AbstractHttpClientWagon
         }
         else
         {
-            PoolingClientConnectionManager poolingClientConnectionManager =
-                new PoolingClientConnectionManager( createSchemeRegistry() );
+            PoolingHttpClientConnectionManager poolingClientConnectionManager =
+                new PoolingHttpClientConnectionManager( createSocketFactoryRegistry() );
             int maxPerRoute =
                 Integer.parseInt( System.getProperty( "maven.wagon.httpconnectionManager.maxPerRoute", "20" ) );
             poolingClientConnectionManager.setDefaultMaxPerRoute( maxPerRoute );
@@ -360,7 +374,7 @@ public abstract class AbstractHttpClientWagon
         }
     }
 
-    public ClientConnectionManager getConnectionManager()
+    public HttpClientConnectionManager getConnectionManager()
     {
         if ( !useClientManagerPooled )
         {
@@ -369,7 +383,7 @@ public abstract class AbstractHttpClientWagon
         return connectionManagerPooled;
     }
 
-    public static void setConnectionManagerPooled( ClientConnectionManager clientConnectionManager )
+    public static void setConnectionManagerPooled( HttpClientConnectionManager clientConnectionManager )
     {
         connectionManagerPooled = clientConnectionManager;
     }
@@ -390,15 +404,11 @@ public abstract class AbstractHttpClientWagon
      */
     private HttpConfiguration httpConfiguration;
 
-    private HttpGet getMethod;
-
     public void openConnectionInternal()
     {
         repository.setUrl( getURL( repository ) );
-        client = new DefaultHttpClient( getConnectionManager() );
 
-        // WAGON-273: default the cookie-policy to browser compatible
-        client.getParams().setParameter( ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY );
+        CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
 
         if ( authenticationInfo != null )
         {
@@ -413,7 +423,7 @@ public abstract class AbstractHttpClientWagon
                 String host = getRepository().getHost();
                 int port = getRepository().getPort() > -1 ? getRepository().getPort() : AuthScope.ANY_PORT;
 
-                client.getCredentialsProvider().setCredentials( new AuthScope( host, port ), creds );
+                credentialsProvider.setCredentials(new AuthScope(host, port), creds);
                 // preemptive off by default
                 /*
                 AuthCache authCache = new BasicAuthCache();
@@ -428,6 +438,7 @@ public abstract class AbstractHttpClientWagon
             }
         }
 
+        HttpHost proxy = null;
         ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() );
         if ( proxyInfo != null )
         {
@@ -439,7 +450,7 @@ public abstract class AbstractHttpClientWagon
             String proxyNtlmDomain = proxyInfo.getNtlmDomain();
             if ( proxyHost != null )
             {
-                HttpHost proxy = new HttpHost( proxyHost, proxyPort );
+                proxy = new HttpHost( proxyHost, proxyPort );
 
                 if ( proxyUsername != null && proxyPassword != null )
                 {
@@ -456,12 +467,20 @@ public abstract class AbstractHttpClientWagon
                     int port = proxyInfo.getPort() > -1 ? proxyInfo.getPort() : AuthScope.ANY_PORT;
 
                     AuthScope authScope = new AuthScope( proxyHost, port );
-                    client.getCredentialsProvider().setCredentials( authScope, creds );
+                    credentialsProvider.setCredentials(authScope, creds);
                 }
-
-                client.getParams().setParameter( ConnRoutePNames.DEFAULT_PROXY, proxy );
             }
         }
+
+        localContext = HttpClientContext.create();
+
+        client = HttpClientBuilder.create()
+                .useSystemProperties()
+                .disableConnectionState()
+                .setConnectionManager(getConnectionManager())
+                .setProxy(proxy)
+                .setDefaultCredentialsProvider(credentialsProvider)
+                .build();
     }
 
     public void closeConnection()
@@ -556,8 +575,7 @@ public abstract class AbstractHttpClientWagon
                     new HttpHost( repository.getHost(), repository.getPort(), repository.getProtocol() );
                 authCache.put( targetHost, basicAuth );
 
-                localContext = new BasicHttpContext();
-                localContext.setAttribute( ClientContext.AUTH_CACHE, authCache );
+                localContext.setAuthCache( authCache );
             }
         }
 
@@ -569,73 +587,71 @@ public abstract class AbstractHttpClientWagon
         {
             putMethod.setEntity( httpEntity );
 
-            HttpResponse response;
+            CloseableHttpResponse response = execute( putMethod );
             try
             {
-                response = execute( putMethod );
-            }
-            catch ( IOException e )
-            {
-                fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
-
-                throw new TransferFailedException( e.getMessage(), e );
-            }
-            catch ( HttpException e )
-            {
-                fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
-
-                throw new TransferFailedException( e.getMessage(), e );
-            }
+                int statusCode = response.getStatusLine().getStatusCode();
+                String reasonPhrase = ", ReasonPhrase: " + response.getStatusLine().getReasonPhrase() + ".";
+                fireTransferDebug(url + " - Status code: " + statusCode + reasonPhrase);
 
-            int statusCode = response.getStatusLine().getStatusCode();
-            String reasonPhrase = ", ReasonPhrase: " + response.getStatusLine().getReasonPhrase() + ".";
-            fireTransferDebug( url + " - Status code: " + statusCode + reasonPhrase );
-
-            // Check that we didn't run out of retries.
-            switch ( statusCode )
-            {
-                // Success Codes
-                case HttpStatus.SC_OK: // 200
-                case HttpStatus.SC_CREATED: // 201
-                case HttpStatus.SC_ACCEPTED: // 202
-                case HttpStatus.SC_NO_CONTENT:  // 204
-                    break;
-                // handle all redirect even if http specs says " the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user"
-                case HttpStatus.SC_MOVED_PERMANENTLY: // 301
-                case HttpStatus.SC_MOVED_TEMPORARILY: // 302
-                case HttpStatus.SC_SEE_OTHER: // 303
-                    put( resource, source, httpEntity, calculateRelocatedUrl( response ) );
-                    return;
-                case SC_NULL:
+                // Check that we didn't run out of retries.
+                switch ( statusCode )
                 {
-                    TransferFailedException e =
-                        new TransferFailedException( "Failed to transfer file: " + url + reasonPhrase );
-                    fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
-                    throw e;
-                }
+                    // Success Codes
+                    case HttpStatus.SC_OK: // 200
+                    case HttpStatus.SC_CREATED: // 201
+                    case HttpStatus.SC_ACCEPTED: // 202
+                    case HttpStatus.SC_NO_CONTENT:  // 204
+                        break;
+                    // handle all redirect even if http specs says " the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user"
+                    case HttpStatus.SC_MOVED_PERMANENTLY: // 301
+                    case HttpStatus.SC_MOVED_TEMPORARILY: // 302
+                    case HttpStatus.SC_SEE_OTHER: // 303
+                        put( resource, source, httpEntity, calculateRelocatedUrl( response ) );
+                        return;
+                    case SC_NULL:
+                    {
+                        TransferFailedException e =
+                            new TransferFailedException( "Failed to transfer file: " + url + reasonPhrase );
+                        fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+                        throw e;
+                    }
 
-                case HttpStatus.SC_FORBIDDEN:
-                    fireSessionConnectionRefused();
-                    throw new AuthorizationException( "Access denied to: " + url + reasonPhrase );
+                    case HttpStatus.SC_FORBIDDEN:
+                        fireSessionConnectionRefused();
+                        throw new AuthorizationException( "Access denied to: " + url + reasonPhrase );
 
-                case HttpStatus.SC_NOT_FOUND:
-                    throw new ResourceDoesNotExistException( "File: " + url + " does not exist" + reasonPhrase );
+                    case HttpStatus.SC_NOT_FOUND:
+                        throw new ResourceDoesNotExistException( "File: " + url + " does not exist" + reasonPhrase );
 
-                    //add more entries here
-                default:
-                {
-                    TransferFailedException e = new TransferFailedException(
-                        "Failed to transfer file: " + url + ". Return code is: " + statusCode + reasonPhrase );
-                    fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
-                    throw e;
+                        //add more entries here
+                    default:
+                    {
+                        TransferFailedException e = new TransferFailedException(
+                            "Failed to transfer file: " + url + ". Return code is: " + statusCode + reasonPhrase );
+                        fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+                        throw e;
+                    }
                 }
+
+                firePutCompleted(resource, source);
+            }
+            finally
+            {
+                response.close();
             }
+        }
+        catch ( IOException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
 
-            firePutCompleted( resource, source );
+            throw new TransferFailedException( e.getMessage(), e );
         }
-        finally
+        catch ( HttpException e )
         {
-            putMethod.abort();
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
+            throw new TransferFailedException( e.getMessage(), e );
         }
     }
 
@@ -659,11 +675,46 @@ public abstract class AbstractHttpClientWagon
         String repositoryUrl = getRepository().getUrl();
         String url = repositoryUrl + ( repositoryUrl.endsWith( "/" ) ? "" : "/" ) + resourceName;
         HttpHead headMethod = new HttpHead( url );
-        HttpResponse response = null;
-        int statusCode;
         try
         {
-            response = execute( headMethod );
+            CloseableHttpResponse response = execute( headMethod );
+            try {
+                int statusCode = response.getStatusLine().getStatusCode();
+                String reasonPhrase = ", ReasonPhrase: " + response.getStatusLine().getReasonPhrase() + ".";
+                switch ( statusCode )
+                {
+                    case HttpStatus.SC_OK:
+                        return true;
+
+                    case HttpStatus.SC_NOT_MODIFIED:
+                        return true;
+
+                    case SC_NULL:
+                        throw new TransferFailedException( "Failed to transfer file: " + url + reasonPhrase );
+
+                    case HttpStatus.SC_FORBIDDEN:
+                        throw new AuthorizationException( "Access denied to: " + url + reasonPhrase );
+
+                    case HttpStatus.SC_UNAUTHORIZED:
+                        throw new AuthorizationException( "Not authorized " + reasonPhrase );
+
+                    case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
+                        throw new AuthorizationException( "Not authorized by proxy " + reasonPhrase );
+
+                    case HttpStatus.SC_NOT_FOUND:
+                        return false;
+
+                    //add more entries here
+                    default:
+                        throw new TransferFailedException(
+                            "Failed to transfer file: " + url + ". Return code is: " + statusCode + reasonPhrase );
+                }
+
+            }
+            finally
+            {
+                response.close();
+            }
         }
         catch ( IOException e )
         {
@@ -673,52 +724,49 @@ public abstract class AbstractHttpClientWagon
         {
             throw new TransferFailedException( e.getMessage(), e );
         }
+    }
 
-        try
-        {
-            statusCode = response.getStatusLine().getStatusCode();
-            String reasonPhrase = ", ReasonPhrase: " + response.getStatusLine().getReasonPhrase() + ".";
-            switch ( statusCode )
-            {
-                case HttpStatus.SC_OK:
-                    return true;
-
-                case HttpStatus.SC_NOT_MODIFIED:
-                    return true;
+    protected CloseableHttpResponse execute( HttpUriRequest httpMethod)
+        throws HttpException, IOException
+    {
+        setHeaders( httpMethod );
+        String userAgent = getUserAgent( httpMethod );
+        if (userAgent != null) {
+            httpMethod.setHeader(HTTP.USER_AGENT, userAgent);
+        }
 
-                case SC_NULL:
-                    throw new TransferFailedException( "Failed to transfer file: " + url + reasonPhrase );
+        HttpMethodConfiguration config =
+            httpConfiguration == null ? null : httpConfiguration.getMethodConfiguration( httpMethod );
+        if ( config != null )
+        {
+            localContext.setRequestConfig( config.asRequestConfig() );
 
-                case HttpStatus.SC_FORBIDDEN:
-                    throw new AuthorizationException( "Access denied to: " + url + reasonPhrase );
+            if ( config.isUsePreemptive() && authenticationInfo != null )
+            {
+                String username = authenticationInfo.getUserName();
+                String password = authenticationInfo.getPassword();
 
-                case HttpStatus.SC_UNAUTHORIZED:
-                    throw new AuthorizationException( "Not authorized " + reasonPhrase );
+                if ( StringUtils.isNotEmpty( username ) && StringUtils.isNotEmpty( password ) )
+                {
 
-                case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
-                    throw new AuthorizationException( "Not authorized by proxy " + reasonPhrase );
+                    AuthCache authCache = new BasicAuthCache();
+                    BasicScheme basicAuth = new BasicScheme();
+                    HttpHost targetHost =
+                        new HttpHost( repository.getHost(), repository.getPort(), repository.getProtocol() );
+                    authCache.put( targetHost, basicAuth );
 
-                case HttpStatus.SC_NOT_FOUND:
-                    return false;
+                    localContext.setAuthCache( authCache );
+                }
 
-                //add more entries here
-                default:
-                    throw new TransferFailedException(
-                        "Failed to transfer file: " + url + ". Return code is: " + statusCode + reasonPhrase );
             }
         }
-        finally
+        else
         {
-            headMethod.abort();
+            RequestConfig requestConfig = RequestConfig.custom()
+                    .setSocketTimeout( getReadTimeout() )
+                    .build();
+            localContext.setRequestConfig( requestConfig );
         }
-    }
-
-    protected HttpResponse execute( HttpUriRequest httpMethod )
-        throws HttpException, IOException
-    {
-        setParameters( httpMethod );
-        setHeaders( httpMethod );
-        client.getParams().setParameter( CoreProtocolPNames.USER_AGENT, getUserAgent( httpMethod ) );
 
         ProxyInfo proxyInfo = getProxyInfo( getRepository().getProtocol(), getRepository().getHost() );
 
@@ -747,47 +795,6 @@ public abstract class AbstractHttpClientWagon
         return client.execute( httpMethod, localContext );
     }
 
-    protected void setParameters( HttpUriRequest method )
-    {
-        HttpMethodConfiguration config =
-            httpConfiguration == null ? null : httpConfiguration.getMethodConfiguration( method );
-        if ( config != null )
-        {
-            HttpParams params = config.asMethodParams( method.getParams() );
-
-            if ( config.isUsePreemptive() && authenticationInfo != null )
-            {
-                String username = authenticationInfo.getUserName();
-                String password = authenticationInfo.getPassword();
-
-                if ( StringUtils.isNotEmpty( username ) && StringUtils.isNotEmpty( password ) )
-                {
-
-                    AuthCache authCache = new BasicAuthCache();
-                    BasicScheme basicAuth = new BasicScheme();
-                    HttpHost targetHost =
-                        new HttpHost( repository.getHost(), repository.getPort(), repository.getProtocol() );
-                    authCache.put( targetHost, basicAuth );
-
-                    localContext = new BasicHttpContext();
-                    localContext.setAttribute( ClientContext.AUTH_CACHE, authCache );
-                }
-
-            }
-
-            if ( params != null )
-            {
-                method.setParams( params );
-            }
-        }
-
-        if ( config == null )
-        {
-            int readTimeout = getReadTimeout();
-            method.getParams().setParameter( CoreConnectionPNames.SO_TIMEOUT, readTimeout );
-        }
-    }
-
     protected void setHeaders( HttpUriRequest method )
     {
         HttpMethodConfiguration config =
@@ -902,7 +909,7 @@ public abstract class AbstractHttpClientWagon
 
         String repositoryUrl = getRepository().getUrl();
         String url = repositoryUrl + ( repositoryUrl.endsWith( "/" ) ? "" : "/" ) + resource.getName();
-        getMethod = new HttpGet( url );
+        HttpGet getMethod = new HttpGet( url );
         long timestamp = resource.getLastModified();
         if ( timestamp > 0 )
         {
@@ -913,145 +920,150 @@ public abstract class AbstractHttpClientWagon
             getMethod.addHeader( hdr );
         }
 
-        HttpResponse response;
-        int statusCode;
         try
         {
-            response = execute( getMethod );
-        }
-        catch ( IOException e )
-        {
-            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            CloseableHttpResponse response = execute( getMethod );
+            closeable = response;
+            int statusCode = response.getStatusLine().getStatusCode();
 
-            throw new TransferFailedException( e.getMessage(), e );
-        }
-        catch ( HttpException e )
-        {
-            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            String reasonPhrase = ", ReasonPhrase:" + response.getStatusLine().getReasonPhrase() + ".";
 
-            throw new TransferFailedException( e.getMessage(), e );
-        }
+            fireTransferDebug( url + " - Status code: " + statusCode + reasonPhrase );
 
-        statusCode = response.getStatusLine().getStatusCode();
+            // TODO [BP]: according to httpclient docs, really should swallow the output on error. verify if that is
+            // required
+            switch ( statusCode )
+            {
+                case HttpStatus.SC_OK:
+                    break;
 
-        String reasonPhrase = ", ReasonPhrase:" + response.getStatusLine().getReasonPhrase() + ".";
+                case HttpStatus.SC_NOT_MODIFIED:
+                    // return, leaving last modified set to original value so getIfNewer should return unmodified
+                    return;
 
-        fireTransferDebug( url + " - Status code: " + statusCode + reasonPhrase );
+                case SC_NULL:
+                {
+                    TransferFailedException e =
+                        new TransferFailedException( "Failed to transfer file: " + url + " " + reasonPhrase );
+                    fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+                    throw e;
+                }
 
-        // TODO [BP]: according to httpclient docs, really should swallow the output on error. verify if that is
-        // required
-        switch ( statusCode )
-        {
-            case HttpStatus.SC_OK:
-                break;
+                case HttpStatus.SC_FORBIDDEN:
+                    fireSessionConnectionRefused();
+                    throw new AuthorizationException( "Access denied to: " + url + " " + reasonPhrase );
 
-            case HttpStatus.SC_NOT_MODIFIED:
-                // return, leaving last modified set to original value so getIfNewer should return unmodified
-                return;
+                case HttpStatus.SC_UNAUTHORIZED:
+                    fireSessionConnectionRefused();
+                    throw new AuthorizationException( "Not authorized " + reasonPhrase );
 
-            case SC_NULL:
-            {
-                TransferFailedException e =
-                    new TransferFailedException( "Failed to transfer file: " + url + " " + reasonPhrase );
-                fireTransferError( resource, e, TransferEvent.REQUEST_GET );
-                throw e;
-            }
+                case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
+                    fireSessionConnectionRefused();
+                    throw new AuthorizationException( "Not authorized by proxy " + reasonPhrase );
 
-            case HttpStatus.SC_FORBIDDEN:
-                fireSessionConnectionRefused();
-                throw new AuthorizationException( "Access denied to: " + url + " " + reasonPhrase );
+                case HttpStatus.SC_NOT_FOUND:
+                    throw new ResourceDoesNotExistException( "File: " + url + " " + reasonPhrase );
 
-            case HttpStatus.SC_UNAUTHORIZED:
-                fireSessionConnectionRefused();
-                throw new AuthorizationException( "Not authorized " + reasonPhrase );
+                    // add more entries here
+                default:
+                {
+                    cleanupGetTransfer( resource );
+                    TransferFailedException e = new TransferFailedException(
+                        "Failed to transfer file: " + url + ". Return code is: " + statusCode + " " + reasonPhrase );
+                    fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+                    throw e;
+                }
+            }
 
-            case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
-                fireSessionConnectionRefused();
-                throw new AuthorizationException( "Not authorized by proxy " + reasonPhrase );
+            InputStream is;
 
-            case HttpStatus.SC_NOT_FOUND:
-                throw new ResourceDoesNotExistException( "File: " + url + " " + reasonPhrase );
+            Header contentLengthHeader = response.getFirstHeader( "Content-Length" );
 
-                // add more entries here
-            default:
+            if ( contentLengthHeader != null )
             {
-                cleanupGetTransfer( resource );
-                TransferFailedException e = new TransferFailedException(
-                    "Failed to transfer file: " + url + ". Return code is: " + statusCode + " " + reasonPhrase );
-                fireTransferError( resource, e, TransferEvent.REQUEST_GET );
-                throw e;
+                try
+                {
+                    long contentLength = Long.parseLong( contentLengthHeader.getValue() );
+
+                    resource.setContentLength( contentLength );
+                }
+                catch ( NumberFormatException e )
+                {
+                    fireTransferDebug(
+                        "error parsing content length header '" + contentLengthHeader.getValue() + "' " + e );
+                }
             }
-        }
 
-        InputStream is;
+            Header lastModifiedHeader = response.getFirstHeader( "Last-Modified" );
 
-        Header contentLengthHeader = response.getFirstHeader( "Content-Length" );
+            long lastModified = 0;
 
-        if ( contentLengthHeader != null )
-        {
-            try
+            if ( lastModifiedHeader != null )
             {
-                long contentLength = Long.parseLong( contentLengthHeader.getValue() );
+                try
+                {
+                    lastModified = DateUtils.parseDate( lastModifiedHeader.getValue() ).getTime();
 
-                resource.setContentLength( contentLength );
-            }
-            catch ( NumberFormatException e )
-            {
-                fireTransferDebug(
-                    "error parsing content length header '" + contentLengthHeader.getValue() + "' " + e );
-            }
-        }
+                    resource.setLastModified( lastModified );
+                }
+                catch ( DateParseException e )
+                {
+                    fireTransferDebug( "Unable to parse last modified header" );
+                }
 
-        Header lastModifiedHeader = response.getFirstHeader( "Last-Modified" );
+                fireTransferDebug( "last-modified = " + lastModifiedHeader.getValue() + " (" + lastModified + ")" );
+            }
 
-        long lastModified = 0;
+            Header contentEncoding = response.getFirstHeader( "Content-Encoding" );
+            boolean isGZipped = contentEncoding == null ? false : "gzip".equalsIgnoreCase( contentEncoding.getValue() );
 
-        if ( lastModifiedHeader != null )
-        {
             try
             {
-                lastModified = DateUtils.parseDate( lastModifiedHeader.getValue() ).getTime();
+                is = response.getEntity().getContent();
 
-                resource.setLastModified( lastModified );
+                if ( isGZipped )
+                {
+                    is = new GZIPInputStream( is );
+                }
             }
-            catch ( DateParseException e )
+            catch ( IOException e )
             {
-                fireTransferDebug( "Unable to parse last modified header" );
-            }
-
-            fireTransferDebug( "last-modified = " + lastModifiedHeader.getValue() + " (" + lastModified + ")" );
-        }
+                fireTransferError( resource, e, TransferEvent.REQUEST_GET );
 
-        Header contentEncoding = response.getFirstHeader( "Content-Encoding" );
-        boolean isGZipped = contentEncoding == null ? false : "gzip".equalsIgnoreCase( contentEncoding.getValue() );
+                String msg =
+                    "Error occurred while retrieving from remote repository " + getRepository() + ": " + e.getMessage();
 
-        try
-        {
-            is = response.getEntity().getContent();
-
-            if ( isGZipped )
-            {
-                is = new GZIPInputStream( is );
+                throw new TransferFailedException( msg, e );
             }
+
+            inputData.setInputStream( is );
         }
         catch ( IOException e )
         {
             fireTransferError( resource, e, TransferEvent.REQUEST_GET );
 
-            String msg =
-                "Error occurred while retrieving from remote repository " + getRepository() + ": " + e.getMessage();
-
-            throw new TransferFailedException( msg, e );
+            throw new TransferFailedException( e.getMessage(), e );
         }
+        catch ( HttpException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
 
-        inputData.setInputStream( is );
+            throw new TransferFailedException( e.getMessage(), e );
+        }
     }
 
     protected void cleanupGetTransfer( Resource resource )
     {
-        if ( getMethod != null )
+        if ( closeable != null )
         {
-            getMethod.abort();
+            try
+            {
+                closeable.close();
+            }
+            catch (IOException ignore)
+            {
+            }
+
         }
     }
 

http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/a12972eb/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/ConfigurableSSLSocketFactoryDecorator.java
----------------------------------------------------------------------
diff --git a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/ConfigurableSSLSocketFactoryDecorator.java b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/ConfigurableSSLSocketFactoryDecorator.java
deleted file mode 100644
index d3ab658..0000000
--- a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/ConfigurableSSLSocketFactoryDecorator.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package org.apache.maven.wagon.providers.http;
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-import java.net.UnknownHostException;
-
-import javax.net.ssl.SSLSocket;
-
-import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.conn.scheme.SchemeLayeredSocketFactory;
-import org.apache.http.params.HttpParams;
-import org.codehaus.plexus.util.StringUtils;
-
-/**
- * @since 2.4
- */
-class ConfigurableSSLSocketFactoryDecorator
-    implements SchemeLayeredSocketFactory
-{
-
-    private final SchemeLayeredSocketFactory sslSocketFactory;
-
-    public ConfigurableSSLSocketFactoryDecorator( SchemeLayeredSocketFactory sslSocketFactory )
-    {
-        super();
-        this.sslSocketFactory = sslSocketFactory;
-    }
-
-    public Socket createSocket( final HttpParams params )
-        throws IOException
-    {
-        return enableSslProtocols( this.sslSocketFactory.createSocket( params ) );
-    }
-
-    public Socket createLayeredSocket( final Socket socket, final String target, int port, final HttpParams params )
-        throws IOException, UnknownHostException
-    {
-        return enableSslProtocols( this.sslSocketFactory.createLayeredSocket( socket, target, port, params ) );
-    }
-
-    public Socket connectSocket( final Socket sock, final InetSocketAddress remoteAddress,
-                                 final InetSocketAddress localAddress, final HttpParams params )
-        throws IOException, UnknownHostException, ConnectTimeoutException
-    {
-        return this.sslSocketFactory.connectSocket( sock, remoteAddress, localAddress, params );
-    }
-
-    public boolean isSecure( final Socket sock )
-        throws IllegalArgumentException
-    {
-        return this.sslSocketFactory.isSecure( sock );
-    }
-
-    protected Socket enableSslProtocols( Socket socket )
-    {
-        String httpsProtocols = System.getProperty( "https.protocols" );
-        if ( StringUtils.isNotEmpty( httpsProtocols ) )
-        {
-            String[] protocols = StringUtils.split( httpsProtocols, "," );
-            if ( socket instanceof SSLSocket )
-            {
-                ( (SSLSocket) socket ).setEnabledProtocols( protocols );
-            }
-        }
-
-        return socket;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/a12972eb/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
old mode 100644
new mode 100755
index 8fb01e1..3be9837
--- 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
@@ -19,15 +19,10 @@ package org.apache.maven.wagon.providers.http;
  * under the License.
  */
 
-import org.apache.http.Header;
-import org.apache.http.message.BasicHeader;
-import org.apache.http.params.BasicHttpParams;
-import org.apache.http.params.CoreConnectionPNames;
-import org.apache.http.params.DefaultedHttpParams;
-import org.apache.http.params.HttpParams;
-import org.apache.maven.wagon.Wagon;
-
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -36,11 +31,18 @@ import java.util.Properties;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.http.Header;
+import org.apache.http.HttpHost;
+import org.apache.http.client.config.CookieSpecs;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.params.CoreConnectionPNames;
+import org.apache.http.params.HttpParams;
+import org.apache.maven.wagon.Wagon;
+
 public class HttpMethodConfiguration
 {
 
-    private static final String COERCE_PATTERN = "%(\\w+),(.+)";
-
     private Boolean useDefaultHeaders;
 
     private Properties headers = new Properties();
@@ -126,18 +128,123 @@ public class HttpMethodConfiguration
         return this;
     }
 
-    public HttpParams asMethodParams( HttpParams defaults )
+    private static final String SO_TIMEOUT                  = "http.socket.timeout";
+    private static final String STALE_CONNECTION_CHECK      = "http.connection.stalecheck";
+    private static final String CONNECTION_TIMEOUT          = "http.connection.timeout";
+    private static final String USE_EXPECT_CONTINUE         = "http.protocol.expect-continue";
+    private static final String DEFAULT_PROXY               = "http.route.default-proxy";
+    private static final String LOCAL_ADDRESS               = "http.route.local-address";
+    private static final String PROXY_AUTH_PREF             = "http.auth.proxy-scheme-pref";
+    private static final String TARGET_AUTH_PREF            = "http.auth.target-scheme-pref";
+    private static final String HANDLE_AUTHENTICATION       = "http.protocol.handle-authentication";
+    private static final String ALLOW_CIRCULAR_REDIRECTS    = "http.protocol.allow-circular-redirects";
+    private static final String CONN_MANAGER_TIMEOUT        = "http.conn-manager.timeout";
+    private static final String COOKIE_POLICY               = "http.protocol.cookie-policy";
+    private static final String MAX_REDIRECTS               = "http.protocol.max-redirects";
+    private static final String HANDLE_REDIRECTS            = "http.protocol.handle-redirects";
+    private static final String REJECT_RELATIVE_REDIRECT    = "http.protocol.reject-relative-redirect";
+
+    private static final String COERCE_PATTERN = "%(\\w+),(.+)";
+
+    public RequestConfig asRequestConfig()
     {
         if ( !hasParams() )
         {
             return null;
         }
+        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);
+        }
+        if ( readTimeout > 0 )
+        {
+            builder.setSocketTimeout(readTimeout);
+        }
+        if ( params != null )
+        {
 
-        DefaultedHttpParams p = new DefaultedHttpParams( new BasicHttpParams(), defaults );
-
-        fillParams( p );
+            Pattern coercePattern = Pattern.compile( COERCE_PATTERN );
+            for ( Iterator<?> it = params.entrySet().iterator(); it.hasNext(); )
+            {
+                Map.Entry<String, String> entry = (Map.Entry) it.next();
+                String key = entry.getKey();
+                String value = entry.getValue();
+                Matcher matcher = coercePattern.matcher(value);
+                if ( matcher.matches() )
+                {
+                    value = matcher.group( 2 );
+                }
 
-        return p;
+                if ( key.equals( SO_TIMEOUT ) )
+                {
+                    builder.setSocketTimeout( Integer.parseInt( value ) );
+                }
+                else if ( key.equals( STALE_CONNECTION_CHECK ) )
+                {
+                    builder.setStaleConnectionCheckEnabled( Boolean.valueOf( value ) );
+                }
+                else if ( key.equals( CONNECTION_TIMEOUT ) )
+                {
+                    builder.setConnectTimeout( Integer.parseInt( value ) );
+                }
+                else if ( key.equals( USE_EXPECT_CONTINUE ) )
+                {
+                    builder.setExpectContinueEnabled( Boolean.valueOf( value ) );
+                }
+                else if ( key.equals( DEFAULT_PROXY ) )
+                {
+                    builder.setProxy( new HttpHost( value ));
+                }
+                else if ( key.equals( LOCAL_ADDRESS ) )
+                {
+                    try {
+                        builder.setLocalAddress( InetAddress.getByName( value ) );
+                    }
+                    catch (UnknownHostException ignore) {
+                    }
+                }
+                else if ( key.equals( PROXY_AUTH_PREF ) )
+                {
+                    builder.setProxyPreferredAuthSchemes( Arrays.asList( value.split( "," ) ) );
+                }
+                else if ( key.equals( TARGET_AUTH_PREF ) )
+                {
+                    builder.setTargetPreferredAuthSchemes( Arrays.asList( value.split( "," ) ) );
+                }
+                else if ( key.equals( HANDLE_AUTHENTICATION ) )
+                {
+                    builder.setAuthenticationEnabled( Boolean.valueOf( value ) );
+                }
+                else if ( key.equals( ALLOW_CIRCULAR_REDIRECTS ) )
+                {
+                    builder.setCircularRedirectsAllowed( Boolean.valueOf( value ) );
+                }
+                else if ( key.equals( CONN_MANAGER_TIMEOUT ) )
+                {
+                    builder.setConnectionRequestTimeout( Integer.parseInt( value ) );
+                }
+                else if ( key.equals( COOKIE_POLICY ) )
+                {
+                    builder.setCookieSpec( value );
+                }
+                else if ( key.equals( MAX_REDIRECTS ) )
+                {
+                    builder.setMaxRedirects( Integer.parseInt( value ) );
+                }
+                else if ( key.equals( HANDLE_REDIRECTS ) )
+                {
+                    builder.setRedirectsEnabled( Boolean.valueOf( value ) );
+                }
+                else if ( key.equals( REJECT_RELATIVE_REDIRECT ) )
+                {
+                    builder.setRelativeRedirectsAllowed( !Boolean.valueOf( value ) );
+                }
+            }
+        }
+        return builder.build();
     }
 
     private boolean hasParams()

http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/a12972eb/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java
----------------------------------------------------------------------
diff --git a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java
old mode 100644
new mode 100755
index acc8533..68fad2c
--- a/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java
+++ b/wagon-providers/wagon-http/src/main/java/org/apache/maven/wagon/providers/http/HttpWagon.java
@@ -19,19 +19,19 @@ package org.apache.maven.wagon.providers.http;
  * under the License.
  */
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.List;
+
 import org.apache.http.HttpException;
-import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.TransferFailedException;
 import org.apache.maven.wagon.authorization.AuthorizationException;
 import org.apache.maven.wagon.shared.http.HtmlFileListParser;
 
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.List;
-
 /**
  * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
  *
@@ -53,42 +53,45 @@ public class HttpWagon
 
         try
         {
+            CloseableHttpResponse response = execute( getMethod );
+            try {
+                int statusCode = response.getStatusLine().getStatusCode();
 
-            HttpResponse response = execute( getMethod );
-            int statusCode = response.getStatusLine().getStatusCode();
-
-            fireTransferDebug( url + " - Status code: " + statusCode );
+                fireTransferDebug( url + " - Status code: " + statusCode );
 
-            // TODO [BP]: according to httpclient docs, really should swallow the output on error. verify if that is required
-            switch ( statusCode )
-            {
-                case HttpStatus.SC_OK:
-                    break;
+                // TODO [BP]: according to httpclient docs, really should swallow the output on error. verify if that is required
+                switch ( statusCode )
+                {
+                    case HttpStatus.SC_OK:
+                        break;
 
-                case SC_NULL:
-                    throw new TransferFailedException( "Failed to transfer file: " );
+                    case SC_NULL:
+                        throw new TransferFailedException( "Failed to transfer file: " );
 
-                case HttpStatus.SC_FORBIDDEN:
-                    throw new AuthorizationException( "Access denied to: " + url );
+                    case HttpStatus.SC_FORBIDDEN:
+                        throw new AuthorizationException( "Access denied to: " + url );
 
-                case HttpStatus.SC_UNAUTHORIZED:
-                    throw new AuthorizationException( "Not authorized." );
+                    case HttpStatus.SC_UNAUTHORIZED:
+                        throw new AuthorizationException( "Not authorized." );
 
-                case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
-                    throw new AuthorizationException( "Not authorized by proxy." );
+                    case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
+                        throw new AuthorizationException( "Not authorized by proxy." );
 
-                case HttpStatus.SC_NOT_FOUND:
-                    throw new ResourceDoesNotExistException( "File: " + url + " does not exist" );
+                    case HttpStatus.SC_NOT_FOUND:
+                        throw new ResourceDoesNotExistException( "File: " + url + " does not exist" );
 
-                    //add more entries here
-                default:
-                    throw new TransferFailedException(
-                        "Failed to transfer file: " + url + ". Return code is: " + statusCode );
-            }
+                        //add more entries here
+                    default:
+                        throw new TransferFailedException(
+                            "Failed to transfer file: " + url + ". Return code is: " + statusCode );
+                }
 
-            InputStream is = response.getEntity().getContent();
+                InputStream is = response.getEntity().getContent();
 
-            return HtmlFileListParser.parseFileList( url, is );
+                return HtmlFileListParser.parseFileList( url, is );
+            } finally {
+                response.close();
+            }
         }
         catch ( IOException e )
         {
@@ -98,9 +101,5 @@ public class HttpWagon
         {
             throw new TransferFailedException( "Could not read response body.", e );
         }
-        finally
-        {
-            getMethod.abort();
-        }
     }
 }

http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/a12972eb/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
old mode 100644
new mode 100755
index c70f1a3..95683cd
--- 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
@@ -21,10 +21,10 @@ package org.apache.maven.wagon.providers.http;
 
 
 import junit.framework.TestCase;
+
 import org.apache.http.Header;
+import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.HttpHead;
-import org.apache.http.client.params.ClientPNames;
-import org.apache.http.params.HttpParams;
 import org.apache.maven.wagon.OutputData;
 import org.apache.maven.wagon.TransferFailedException;
 
@@ -32,43 +32,19 @@ public class HttpClientWagonTest
     extends TestCase
 {
 
-    public void testSetPreemptiveAuthParamViaConfig()
-    {
-        HttpMethodConfiguration methodConfig = new HttpMethodConfiguration();
-        //X TODO methodConfig.addParam( HttpClientParams.PREEMPTIVE_AUTHENTICATION, "%b,true" );
-
-        HttpConfiguration config = new HttpConfiguration();
-        config.setAll( methodConfig );
-
-        TestWagon wagon = new TestWagon();
-        wagon.setHttpConfiguration( config );
-
-        HttpHead method = new HttpHead();
-        wagon.setParameters( method );
-
-        HttpParams params = method.getParams();
-        assertNotNull( params );
-        //X TODO assertTrue( params.isParameterTrue( HttpClientParams.PREEMPTIVE_AUTHENTICATION ) );
-    }
-
     public void testSetMaxRedirectsParamViaConfig()
     {
         HttpMethodConfiguration methodConfig = new HttpMethodConfiguration();
         int maxRedirects = 2;
-        methodConfig.addParam( ClientPNames.MAX_REDIRECTS, "%i," + maxRedirects );
+        methodConfig.addParam("http.protocol.max-redirects", "%i," + maxRedirects);
 
         HttpConfiguration config = new HttpConfiguration();
-        config.setAll( methodConfig );
-
-        TestWagon wagon = new TestWagon();
-        wagon.setHttpConfiguration( config );
+        config.setAll(methodConfig);
 
         HttpHead method = new HttpHead();
-        wagon.setParameters( method );
+        RequestConfig requestConfig = config.getMethodConfiguration(method).asRequestConfig();
 
-        HttpParams params = method.getParams();
-        assertNotNull( params );
-        assertEquals( maxRedirects, params.getIntParameter( ClientPNames.MAX_REDIRECTS, -1 ) );
+        assertEquals(2, requestConfig.getMaxRedirects());
     }
 
     public void testDefaultHeadersUsedByDefault()

http://git-wip-us.apache.org/repos/asf/maven-wagon/blob/a12972eb/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
----------------------------------------------------------------------
diff --git a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
old mode 100644
new mode 100755
index e38046c..edc7538
--- a/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
+++ b/wagon-providers/wagon-http/src/test/java/org/apache/maven/wagon/providers/http/HttpWagonTest.java
@@ -19,13 +19,13 @@ package org.apache.maven.wagon.providers.http;
  * under the License.
  */
 
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
+import java.util.Properties;
+
+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
 import org.apache.maven.wagon.StreamingWagon;
 import org.apache.maven.wagon.Wagon;
 import org.apache.maven.wagon.http.HttpWagonTestCase;
 
-import java.util.Properties;
-
 /**
  * @author <a href="michal.maczka@dimatics.com">Michal Maczka</a>
  */
@@ -56,7 +56,7 @@ public class HttpWagonTest
         throws Exception
     {
         HttpWagon wagon = (HttpWagon) lookup( Wagon.class, "http" );
-        assertTrue( wagon.getConnectionManager() instanceof PoolingClientConnectionManager );
+        assertTrue( wagon.getConnectionManager() instanceof PoolingHttpClientConnectionManager );
 
     }