[MJAVADOC-516] Replace usage of deprecated HttpClient code
diff --git a/pom.xml b/pom.xml
index f683298..4d81bb9 100644
--- a/pom.xml
+++ b/pom.xml
@@ -227,7 +227,7 @@
     <dependency>
       <groupId>org.apache.httpcomponents</groupId>
       <artifactId>httpclient</artifactId>
-      <version>4.5.2</version>
+      <version>4.5.8</version>
     </dependency>
 
     <dependency>
diff --git a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
index 43d4da0..636bf32 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
@@ -19,48 +19,6 @@
  * under the License.

  */

 

-import org.apache.http.HttpHeaders;

-import org.apache.http.HttpHost;

-import org.apache.http.HttpResponse;

-import org.apache.http.HttpStatus;

-import org.apache.http.auth.AuthScope;

-import org.apache.http.auth.Credentials;

-import org.apache.http.auth.UsernamePasswordCredentials;

-import org.apache.http.client.HttpClient;

-import org.apache.http.client.methods.HttpGet;

-import org.apache.http.client.params.ClientPNames;

-import org.apache.http.client.params.CookiePolicy;

-import org.apache.http.client.protocol.HttpClientContext;

-import org.apache.http.conn.params.ConnRoutePNames;

-import org.apache.http.impl.client.DefaultHttpClient;

-import org.apache.http.impl.conn.PoolingClientConnectionManager;

-import org.apache.http.message.BasicHeader;

-import org.apache.http.params.CoreConnectionPNames;

-import org.apache.http.params.CoreProtocolPNames;

-import org.apache.maven.plugin.logging.Log;

-import org.apache.maven.project.MavenProject;

-import org.apache.maven.settings.Proxy;

-import org.apache.maven.settings.Settings;

-import org.apache.maven.shared.invoker.DefaultInvocationRequest;

-import org.apache.maven.shared.invoker.DefaultInvoker;

-import org.apache.maven.shared.invoker.InvocationOutputHandler;

-import org.apache.maven.shared.invoker.InvocationRequest;

-import org.apache.maven.shared.invoker.InvocationResult;

-import org.apache.maven.shared.invoker.Invoker;

-import org.apache.maven.shared.invoker.MavenInvocationException;

-import org.apache.maven.shared.invoker.PrintStreamHandler;

-import org.apache.maven.wagon.proxy.ProxyInfo;

-import org.apache.maven.wagon.proxy.ProxyUtils;

-import org.codehaus.plexus.languages.java.version.JavaVersion;

-import org.codehaus.plexus.util.DirectoryScanner;

-import org.codehaus.plexus.util.FileUtils;

-import org.codehaus.plexus.util.IOUtil;

-import org.codehaus.plexus.util.Os;

-import org.codehaus.plexus.util.StringUtils;

-import org.codehaus.plexus.util.cli.CommandLineException;

-import org.codehaus.plexus.util.cli.CommandLineUtils;

-import org.codehaus.plexus.util.cli.Commandline;

-

 import java.io.BufferedReader;

 import java.io.File;

 import java.io.FileInputStream;

@@ -101,6 +59,53 @@
 import java.util.regex.Pattern;

 import java.util.regex.PatternSyntaxException;

 

+import org.apache.http.HttpHeaders;

+import org.apache.http.HttpHost;

+import org.apache.http.HttpResponse;

+import org.apache.http.HttpStatus;

+import org.apache.http.auth.AuthScope;

+import org.apache.http.auth.Credentials;

+import org.apache.http.auth.UsernamePasswordCredentials;

+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.HttpGet;

+import org.apache.http.client.protocol.HttpClientContext;

+import org.apache.http.config.Registry;

+import org.apache.http.config.RegistryBuilder;

+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.BasicCredentialsProvider;

+import org.apache.http.impl.client.CloseableHttpClient;

+import org.apache.http.impl.client.HttpClientBuilder;

+import org.apache.http.impl.client.HttpClients;

+import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;

+import org.apache.http.message.BasicHeader;

+import org.apache.maven.plugin.logging.Log;

+import org.apache.maven.project.MavenProject;

+import org.apache.maven.settings.Proxy;

+import org.apache.maven.settings.Settings;

+import org.apache.maven.shared.invoker.DefaultInvocationRequest;

+import org.apache.maven.shared.invoker.DefaultInvoker;

+import org.apache.maven.shared.invoker.InvocationOutputHandler;

+import org.apache.maven.shared.invoker.InvocationRequest;

+import org.apache.maven.shared.invoker.InvocationResult;

+import org.apache.maven.shared.invoker.Invoker;

+import org.apache.maven.shared.invoker.MavenInvocationException;

+import org.apache.maven.shared.invoker.PrintStreamHandler;

+import org.apache.maven.wagon.proxy.ProxyInfo;

+import org.apache.maven.wagon.proxy.ProxyUtils;

+import org.codehaus.plexus.languages.java.version.JavaVersion;

+import org.codehaus.plexus.util.DirectoryScanner;

+import org.codehaus.plexus.util.FileUtils;

+import org.codehaus.plexus.util.IOUtil;

+import org.codehaus.plexus.util.Os;

+import org.codehaus.plexus.util.StringUtils;

+import org.codehaus.plexus.util.cli.CommandLineException;

+import org.codehaus.plexus.util.cli.CommandLineUtils;

+import org.codehaus.plexus.util.cli.Commandline;

+

 /**

  * Set of utilities methods for Javadoc.

  *

@@ -1535,10 +1540,9 @@
         {

             return url;

         }

-        HttpClient httpClient = null;

-        try

+

+        try ( CloseableHttpClient httpClient = createHttpClient( settings, url ) )

         {

-            httpClient = createHttpClient( settings, url );

             HttpClientContext httpContext = HttpClientContext.create();

             HttpGet httpMethod = new HttpGet( url.toString() );

             HttpResponse response = httpClient.execute( httpMethod, httpContext );

@@ -1552,13 +1556,6 @@
             List<URI> redirects = httpContext.getRedirectLocations();

             return isEmpty( redirects ) ? url : redirects.get( redirects.size() - 1 ).toURL();

         }

-        finally

-        {

-            if ( httpClient != null )

-            {

-                httpClient.getConnectionManager().shutdown();

-            }

-        }

     }

 

     /**

@@ -1639,7 +1636,7 @@
         else

         {

             // http, https...

-            final HttpClient httpClient = createHttpClient( settings, url );

+            final CloseableHttpClient httpClient = createHttpClient( settings, url );

 

             final HttpGet httpMethod = new HttpGet( url.toString() );

 

@@ -1693,7 +1690,7 @@
                     }

                     if ( httpClient != null )

                     {

-                        httpClient.getConnectionManager().shutdown();

+                        httpClient.close();

                     }

                 }

             };

@@ -1751,22 +1748,29 @@
      * @see #DEFAULT_TIMEOUT

      * @since 2.8

      */

-    private static HttpClient createHttpClient( Settings settings, URL url )

+    private static CloseableHttpClient createHttpClient( Settings settings, URL url )

     {

-        DefaultHttpClient httpClient = new DefaultHttpClient( new PoolingClientConnectionManager() );

-        httpClient.getParams().setIntParameter( CoreConnectionPNames.SO_TIMEOUT, DEFAULT_TIMEOUT );

-        httpClient.getParams().setIntParameter( CoreConnectionPNames.CONNECTION_TIMEOUT, DEFAULT_TIMEOUT );

-        httpClient.getParams().setBooleanParameter( ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true );

-

+        HttpClientBuilder builder = HttpClients.custom();

+        

+        Registry<ConnectionSocketFactory> csfRegistry =

+            RegistryBuilder.<ConnectionSocketFactory>create()

+                .register( "http", PlainConnectionSocketFactory.getSocketFactory() )

+                .register( "https", SSLConnectionSocketFactory.getSystemSocketFactory() )

+                .build();

+        

+        builder.setConnectionManager( new PoolingHttpClientConnectionManager( csfRegistry ) );

+        builder.setDefaultRequestConfig( RequestConfig.custom()

+                                         .setSocketTimeout( DEFAULT_TIMEOUT )

+                                         .setConnectTimeout( DEFAULT_TIMEOUT )

+                                         .setCircularRedirectsAllowed( true )

+                                         .setCookieSpec( CookieSpecs.IGNORE_COOKIES )

+                                         .build() );

+        

         // Some web servers don't allow the default user-agent sent by httpClient

-        httpClient.getParams().setParameter( CoreProtocolPNames.USER_AGENT,

-                                             "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" );

+        builder.setUserAgent( "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" );

 

         // Some server reject requests that do not have an Accept header

-        httpClient.getParams().setParameter( ClientPNames.DEFAULT_HEADERS,

-                                             Arrays.asList( new BasicHeader( HttpHeaders.ACCEPT, "*/*" ) ) );

-

-        httpClient.getParams().setParameter( ClientPNames.COOKIE_POLICY, CookiePolicy.BROWSER_COMPATIBILITY );

+        builder.setDefaultHeaders( Arrays.asList( new BasicHeader( HttpHeaders.ACCEPT, "*/*" ) ) );

 

         if ( settings != null && settings.getActiveProxy() != null )

         {

@@ -1779,19 +1783,20 @@
                 && ( url == null || !ProxyUtils.validateNonProxyHosts( proxyInfo, url.getHost() ) ) )

             {

                 HttpHost proxy = new HttpHost( activeProxy.getHost(), activeProxy.getPort() );

-                httpClient.getParams().setParameter( ConnRoutePNames.DEFAULT_PROXY, proxy );

+                builder.setProxy( proxy );

 

                 if ( StringUtils.isNotEmpty( activeProxy.getUsername() ) && activeProxy.getPassword() != null )

                 {

                     Credentials credentials =

                         new UsernamePasswordCredentials( activeProxy.getUsername(), activeProxy.getPassword() );

 

-                    httpClient.getCredentialsProvider().setCredentials( AuthScope.ANY, credentials );

+                    CredentialsProvider credentialsProvider = new BasicCredentialsProvider();

+                    credentialsProvider.setCredentials( AuthScope.ANY, credentials );

+                    builder.setDefaultCredentialsProvider( credentialsProvider );

                 }

             }

         }

-

-        return httpClient;

+        return builder.build();

     }

 

     static boolean equalsIgnoreCase( String value, String... strings )