[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
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 @@
* 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.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 @@
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 @@
}
/**
+ * 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