You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by vs...@apache.org on 2009/07/14 13:15:05 UTC

svn commit: r793854 - in /maven/plugins/trunk/maven-javadoc-plugin: pom.xml src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java src/test/java/org/apache/maven/plugin/javadoc/JavadocUtilTest.java

Author: vsiveton
Date: Tue Jul 14 11:15:04 2009
New Revision: 793854

URL: http://svn.apache.org/viewvc?rev=793854&view=rev
Log:
MJAVADOC-238: No timeout set for URLConnection which can cause build to get stuck

o refactor fetchURL() to use HttpClient
o added test case

Modified:
    maven/plugins/trunk/maven-javadoc-plugin/pom.xml
    maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java
    maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/JavadocUtilTest.java

Modified: maven/plugins/trunk/maven-javadoc-plugin/pom.xml
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/pom.xml?rev=793854&r1=793853&r2=793854&view=diff
==============================================================================
--- maven/plugins/trunk/maven-javadoc-plugin/pom.xml (original)
+++ maven/plugins/trunk/maven-javadoc-plugin/pom.xml Tue Jul 14 11:15:04 2009
@@ -141,6 +141,11 @@
       <version>2.4</version>
     </dependency>
     <dependency>
+      <groupId>commons-httpclient</groupId>
+      <artifactId>commons-httpclient</artifactId>
+      <version>3.1</version>
+    </dependency>
+    <dependency>
       <groupId>com.thoughtworks.qdox</groupId>
       <artifactId>qdox</artifactId>
       <version>1.9.2</version>

Modified: maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java?rev=793854&r1=793853&r2=793854&view=diff
==============================================================================
--- maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java (original)
+++ maven/plugins/trunk/maven-javadoc-plugin/src/main/java/org/apache/maven/plugin/javadoc/JavadocUtil.java Tue Jul 14 11:15:04 2009
@@ -22,14 +22,13 @@
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
 import java.io.UnsupportedEncodingException;
 import java.lang.reflect.Modifier;
-import java.net.Authenticator;
-import java.net.PasswordAuthentication;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.ArrayList;
@@ -37,7 +36,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
-import java.util.Properties;
 import java.util.Set;
 import java.util.StringTokenizer;
 import java.util.jar.JarEntry;
@@ -46,6 +44,10 @@
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
 
+import org.apache.commons.httpclient.HttpClient;
+import org.apache.commons.httpclient.UsernamePasswordCredentials;
+import org.apache.commons.httpclient.auth.AuthScope;
+import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.project.MavenProject;
 import org.apache.maven.settings.Proxy;
@@ -682,60 +684,40 @@
     {
         if ( url == null )
         {
-            throw new IOException( "The url is null" );
+            throw new IllegalArgumentException( "The url is null" );
         }
 
-        Properties oldSystemProperties = new Properties();
-        oldSystemProperties.putAll( System.getProperties() );
-
-        if ( settings != null )
+        HttpClient httpClient = null;
+        if ( !"file".equals( url.getProtocol() ) )
         {
-            String scheme = url.getProtocol();
+            httpClient = new HttpClient();
+            httpClient.getHttpConnectionManager().getParams().setConnectionTimeout( 1000 );
 
-            if ( !"file".equals( scheme ) )
+            if ( settings != null )
             {
                 Proxy activeProxy = settings.getActiveProxy();
+
                 if ( activeProxy != null )
                 {
-                    if ( "http".equals( scheme ) || "https".equals( scheme ) || "ftp".equals( scheme ) )
-                    {
-                        scheme += ".";
-                    }
-                    else
+                    String proxyHost = settings.getActiveProxy().getHost();
+                    int proxyPort = settings.getActiveProxy().getPort();
+
+                    String proxyUser = settings.getActiveProxy().getUsername();
+                    String proxyPass = settings.getActiveProxy().getPassword();
+
+                    if ( StringUtils.isNotEmpty( proxyHost ) )
                     {
-                        scheme = "";
+                        httpClient.getHostConfiguration().setProxy( proxyHost, proxyPort );
                     }
 
-                    if ( StringUtils.isNotEmpty( activeProxy.getHost() ) )
+                    if ( StringUtils.isNotEmpty( proxyUser ) )
                     {
-                        Properties systemProperties = System.getProperties();
-                        systemProperties.setProperty( scheme + "proxySet", "true" );
-                        systemProperties.setProperty( scheme + "proxyHost", activeProxy.getHost() );
-
-                        if ( activeProxy.getPort() > 0 )
-                        {
-                            systemProperties
-                                .setProperty( scheme + "proxyPort", String.valueOf( activeProxy.getPort() ) );
-                        }
-
-                        if ( StringUtils.isNotEmpty( activeProxy.getNonProxyHosts() ) )
-                        {
-                            systemProperties.setProperty( scheme + "nonProxyHosts", activeProxy.getNonProxyHosts() );
-                        }
-
-                        final String userName = activeProxy.getUsername();
-                        if ( StringUtils.isNotEmpty( userName ) )
-                        {
-                            final String pwd = StringUtils.isEmpty( activeProxy.getPassword() ) ? "" : activeProxy
-                                .getPassword();
-                            Authenticator.setDefault( new Authenticator()
-                            {
-                                protected PasswordAuthentication getPasswordAuthentication()
-                                {
-                                    return new PasswordAuthentication( userName, pwd.toCharArray() );
-                                }
-                            } );
-                        }
+                        AuthScope authScope =
+                            new AuthScope( AuthScope.ANY_HOST, AuthScope.ANY_PORT, AuthScope.ANY_REALM,
+                                           AuthScope.ANY_SCHEME );
+                        UsernamePasswordCredentials usernamePasswordCredentials =
+                            new UsernamePasswordCredentials( proxyUser, proxyPass );
+                        httpClient.getState().setProxyCredentials( authScope, usernamePasswordCredentials );
                     }
                 }
             }
@@ -744,20 +726,31 @@
         InputStream in = null;
         try
         {
-            in = url.openStream();
+            if ( httpClient != null )
+            {
+                GetMethod getMethod = new GetMethod( url.toString() );
+
+                try
+                {
+                    int status = httpClient.executeMethod( getMethod );
+                    if ( status != 200 )
+                    {
+                        throw new FileNotFoundException( url.toString() );
+                    }
+                }
+                finally
+                {
+                    getMethod.releaseConnection();
+                }
+            }
+            else
+            {
+                in = url.openStream();
+            }
         }
         finally
         {
             IOUtil.close( in );
-
-            // Reset system properties
-            if ( ( settings != null ) && ( !"file".equals( url.getProtocol() ) )
-                && ( settings.getActiveProxy() != null )
-                && ( StringUtils.isNotEmpty( settings.getActiveProxy().getHost() ) ) )
-            {
-                System.setProperties( oldSystemProperties );
-                Authenticator.setDefault( null );
-            }
         }
     }
 

Modified: maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/JavadocUtilTest.java
URL: http://svn.apache.org/viewvc/maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/JavadocUtilTest.java?rev=793854&r1=793853&r2=793854&view=diff
==============================================================================
--- maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/JavadocUtilTest.java (original)
+++ maven/plugins/trunk/maven-javadoc-plugin/src/test/java/org/apache/maven/plugin/javadoc/JavadocUtilTest.java Tue Jul 14 11:15:04 2009
@@ -19,19 +19,21 @@
  * under the License.
  */
 
+import java.io.File;
+import java.io.IOException;
+import java.net.URL;
 import java.util.regex.PatternSyntaxException;
 
 import org.apache.maven.settings.Proxy;
 import org.apache.maven.settings.Settings;
-
-import junit.framework.TestCase;
+import org.codehaus.plexus.PlexusTestCase;
 
 /**
  * @author <a href="mailto:vincent.siveton@gmail.com">Vincent Siveton</a>
  * @version $Id$
  */
 public class JavadocUtilTest
-    extends TestCase
+    extends PlexusTestCase
 {
     /**
      * Method to test the javadoc version parsing.
@@ -249,4 +251,70 @@
         cmdLine = JavadocUtil.hideProxyPassword( cmdLine, null );
         assertFalse( cmdLine.indexOf( "-J-Dhttp.proxyPassword=\"****\"" ) != -1 );
     }
+
+    /**
+     * Method to test fetchURL()
+     *
+     * @throws Exception if any
+     */
+    public void testFetchURL()
+        throws Exception
+    {
+        Settings settings = null;
+        URL url = null;
+
+        try
+        {
+            JavadocUtil.fetchURL( settings, url );
+            assertTrue( false );
+        }
+        catch ( IllegalArgumentException e )
+        {
+            assertTrue( true );
+        }
+
+        url = new File( getBasedir(), "/pom.xml" ).toURL();
+        JavadocUtil.fetchURL( settings, url );
+        assertTrue( true );
+
+        url = new URL( "http://maven.apache.org/plugins/maven-javadoc-plugin/apidocs/package-list" );
+        JavadocUtil.fetchURL( settings, url );
+        assertTrue( true );
+
+        url = new URL( "http://maven.apache.org/plugins/maven-javadoc-plugin/apidocs/package-list2" );
+        try
+        {
+            JavadocUtil.fetchURL( settings, url );
+            assertTrue( false );
+        }
+        catch ( IOException e )
+        {
+            assertTrue( true );
+        }
+
+        settings = new Settings();
+        Proxy proxy = new Proxy();
+        proxy.setActive( true );
+        proxy.setHost( "140.211.11.10" ); // Apache's HTTP proxy
+        proxy.setPort( 80 );
+        proxy.setUsername( "toto" );
+        proxy.setPassword( "toto" );
+        proxy.setNonProxyHosts( "www.google.com" );
+        settings.addProxy( proxy );
+
+        url = new URL( "http://maven.apache.org/plugins/maven-javadoc-plugin/apidocs/package-list" );
+        JavadocUtil.fetchURL( settings, url );
+        assertTrue( true );
+
+        url = new URL( "http://maven.apache.org/plugins/maven-javadoc-plugin/apidocs/package-list2" );
+        try
+        {
+            JavadocUtil.fetchURL( settings, url );
+            assertTrue( false );
+        }
+        catch ( IOException e )
+        {
+            assertTrue( true );
+        }
+    }
 }