You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gb...@apache.org on 2018/08/09 19:54:33 UTC

[maven-javadoc-plugin] 01/01: [MJAVADOC-533] entries that point to a resource that requires an Accept header may be ignored

This is an automated email from the ASF dual-hosted git repository.

gboue pushed a commit to branch MJAVADOC-533
in repository https://gitbox.apache.org/repos/asf/maven-javadoc-plugin.git

commit 407343bad4cba9431cb490746ca9257c7a6f7594
Author: Guillaume Boué <gb...@apache.org>
AuthorDate: Thu Aug 9 21:29:13 2018 +0200

    [MJAVADOC-533] <link> entries that point to a resource that requires an
    Accept header may be ignored
    
    Add a */* Accept header, that is required by some servers
---
 .../apache/maven/plugins/javadoc/JavadocUtil.java  |  6 ++++
 .../maven/plugins/javadoc/JavadocUtilTest.java     | 40 ++++++++++++++++++++++
 2 files changed, 46 insertions(+)

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 5881549..c7467ae 100644
--- a/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
+++ b/src/main/java/org/apache/maven/plugins/javadoc/JavadocUtil.java
@@ -19,6 +19,7 @@ package org.apache.maven.plugins.javadoc;
  * under the License.
  */
 
+import org.apache.http.HttpHeaders;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpResponse;
 import org.apache.http.HttpStatus;
@@ -32,6 +33,7 @@ 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;
@@ -1816,6 +1818,10 @@ public class JavadocUtil
         httpClient.getParams().setParameter( CoreProtocolPNames.USER_AGENT,
                                              "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, "*/*" ) ) );
+
         if ( settings != null && settings.getActiveProxy() != null )
         {
             Proxy activeProxy = settings.getActiveProxy();
diff --git a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
index 8e9b33f..fa5bfaa 100644
--- a/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
+++ b/src/test/java/org/apache/maven/plugins/javadoc/JavadocUtilTest.java
@@ -618,6 +618,46 @@ public class JavadocUtilTest
     }
 
     /**
+     * Tests that getRedirectUrl adds an Accept header in HTTP requests. Necessary because some sites like Cloudflare
+     * reject requests without an Accept header.
+     */
+    public void testGetRedirectUrlVerifyHeaders()
+        throws Exception
+    {
+        Server server = null;
+        try
+        {
+            server = new Server( 0 );
+            server.addHandler( new AbstractHandler()
+            {
+                @Override
+                public void handle( String target, HttpServletRequest request, HttpServletResponse response,
+                                    int dispatch )
+                    throws IOException, ServletException
+                {
+                    if ( request.getHeader( "Accept" ) == null )
+                    {
+                        response.setStatus( HttpServletResponse.SC_FORBIDDEN );
+                    }
+                    else
+                    {
+                        response.setStatus( HttpServletResponse.SC_OK );
+                    }
+                    response.getOutputStream().close();
+                }
+            } );
+            server.start();
+
+            URL url = new URI( "http://localhost:" + server.getConnectors()[0].getLocalPort() ).toURL();
+            JavadocUtil.getRedirectUrl( url, new Settings() );
+        }
+        finally
+        {
+            stopSilently( server );
+        }
+    }
+
+    /**
      * Method to test copyJavadocResources()
      *
      * @throws Exception if any