Author: vsiveton
Date: Sat Aug  1 11:17:23 2009
New Revision: 799837

URL: http://svn.apache.org/viewvc?rev=799837&view=rev
Log:
o added timeout and httpClientsParameters
o improved log call

Modified:
    
maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java
    
maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java

Modified: 
maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java?rev=799837&r1=799836&r2=799837&view=diff
==============================================================================
--- 
maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java
 (original)
+++ 
maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/LinkValidatorManager.java
 Sat Aug  1 11:17:23 2009
@@ -34,6 +34,7 @@
 import java.io.ObjectInputStream;
 import java.io.ObjectOutputStream;
 import java.io.Serializable;
+import java.net.URI;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.LinkedList;
@@ -404,6 +405,17 @@
             return link.indexOf( pattern ) != -1;
         }
 
+        URI uri = URI.create( link );
+
+        if ( uri.getScheme() != null && !pattern.startsWith( uri.getScheme() ) 
)
+        {
+            return true;
+        }
+
+        if ( pattern.matches( "\\*+/?.*" ) && !link.startsWith( "/" ) && 
!link.startsWith( "./" ) )
+        {
+            link = "./" + link;
+        }
         String diff = StringUtils.difference( link, pattern );
         if ( diff.startsWith( "/" ) )
         {

Modified: 
maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java
URL: 
http://svn.apache.org/viewvc/maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java?rev=799837&r1=799836&r2=799837&view=diff
==============================================================================
--- 
maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java
 (original)
+++ 
maven/doxia/doxia-tools/trunk/doxia-linkcheck/src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java
 Sat Aug  1 11:17:23 2009
@@ -22,6 +22,8 @@
 import java.io.IOException;
 
 import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
 
 import org.apache.commons.httpclient.Credentials;
 import org.apache.commons.httpclient.Header;
@@ -38,6 +40,8 @@
 import org.apache.commons.httpclient.auth.AuthScope;
 import org.apache.commons.httpclient.methods.GetMethod;
 import org.apache.commons.httpclient.methods.HeadMethod;
+import org.apache.commons.httpclient.params.HttpClientParams;
+import org.apache.commons.httpclient.params.HttpMethodParams;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -45,7 +49,6 @@
 import org.apache.maven.doxia.linkcheck.model.LinkcheckFileResult;
 import org.codehaus.plexus.util.StringUtils;
 
-
 /**
  * Checks links which are normal URLs
  *
@@ -54,7 +57,8 @@
  * @author <a href="mailto:[email protected]";>Vincent Siveton</a>
  * @version $Id$
  */
-public final class OnlineHTTPLinkValidator extends HTTPLinkValidator
+public final class OnlineHTTPLinkValidator
+    extends HTTPLinkValidator
 {
     /** Log for debug output. */
     private static final Log LOG = LogFactory.getLog( 
OnlineHTTPLinkValidator.class );
@@ -97,10 +101,7 @@
             bean = new HttpBean();
         }
 
-        if ( LOG.isDebugEnabled() )
-        {
-            LOG.debug( "Will use method : [" + bean.getMethod() + "]" );
-        }
+        LOG.debug( "Will use method : [" + bean.getMethod() + "]" );
 
         this.http = bean;
 
@@ -135,42 +136,50 @@
             initHttpClient();
         }
 
-        String link = lvi.getLink();
+        if ( this.http.getHttpClientParameters() != null )
+        {
+            for ( Iterator it = 
this.http.getHttpClientParameters().entrySet().iterator(); it.hasNext(); )
+            {
+                Map.Entry entry = (Map.Entry) it.next();
+
+                if ( entry.getValue() != null )
+                {
+                    System.setProperty( entry.getKey().toString(), 
entry.getValue().toString() );
+                }
+            }
+        }
 
+        // Some web servers don't allow the default user-agent sent by 
httpClient
+        System.setProperty( HttpMethodParams.USER_AGENT, "Mozilla/4.0 
(compatible; MSIE 6.0; Windows NT 5.0)" );
+
+        String link = lvi.getLink();
         try
         {
             if ( link.startsWith( "/" ) )
             {
                 if ( getBaseURL() == null )
                 {
-                    if ( LOG.isWarnEnabled() )
-                    {
+                    LOG.warn( "Cannot check link [" + link + "] in page [" + 
lvi.getSource()
+                        + "], as no base URL has been set!" );
 
-                        LOG.warn( "Cannot check link [" + link + "] in page [" 
+ lvi.getSource()
-                            + "], as no base URL has been set!" );
-                    }
                     return new LinkValidationResult( 
LinkcheckFileResult.WARNING_LEVEL, false,
-                            "No base URL specified" );
+                                                     "No base URL specified" );
                 }
 
                 link = getBaseURL() + link;
             }
 
             HttpMethod hm = null;
-
             try
             {
                 hm = checkLink( link, 0 );
             }
             catch ( Throwable t )
             {
-                if ( LOG.isDebugEnabled() )
-                {
-                    LOG.debug( "Received: [" + t + "] for [" + link + "] in 
page [" + lvi.getSource() + "]", t );
-                }
+                LOG.debug( "Received: [" + t + "] for [" + link + "] in page 
[" + lvi.getSource() + "]", t );
 
-                return new LinkValidationResult( 
LinkcheckFileResult.ERROR_LEVEL, false, t.getClass().getName() + " : "
-                                + t.getMessage() );
+                return new LinkValidationResult( 
LinkcheckFileResult.ERROR_LEVEL, false, t.getClass().getName()
+                    + " : " + t.getMessage() );
             }
 
             if ( hm == null )
@@ -182,116 +191,114 @@
             if ( hm.getStatusCode() == HttpStatus.SC_OK )
             {
                 return new HTTPLinkValidationResult( 
LinkcheckFileResult.VALID_LEVEL, true, hm.getStatusCode(),
-                                                 hm.getStatusText() );
-        }
+                                                     hm.getStatusText() );
+            }
 
-        // If there's a redirection ... add a warning
-        if ( hm.getStatusCode() == HttpStatus.SC_MOVED_PERMANENTLY
-                        || hm.getStatusCode() == 
HttpStatus.SC_MOVED_TEMPORARILY
-                        || hm.getStatusCode() == 
HttpStatus.SC_TEMPORARY_REDIRECT )
-        {
-            if ( LOG.isWarnEnabled() )
+            String msg =
+                "Received: [" + hm.getStatusCode() + "] for [" + link + "] in 
page [" + lvi.getSource() + "]";
+            // If there's a redirection ... add a warning
+            if ( hm.getStatusCode() == HttpStatus.SC_MOVED_PERMANENTLY
+                || hm.getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY
+                || hm.getStatusCode() == HttpStatus.SC_TEMPORARY_REDIRECT )
             {
-                LOG.warn( "Received: [" + hm.getStatusCode() + "] for [" + 
link + "] in page [" + lvi.getSource()
-                        + "]" );
-                }
+                LOG.warn( msg );
 
                 return new HTTPLinkValidationResult( 
LinkcheckFileResult.WARNING_LEVEL, true, hm.getStatusCode(),
                                                      hm.getStatusText() );
             }
 
-            if ( LOG.isDebugEnabled() )
-            {
-                LOG.debug( "Received: [" + hm.getStatusCode() + "] for [" + 
link + "] in page [" + lvi.getSource()
-                    + "]" );
-            }
+            LOG.debug( msg );
 
             return new HTTPLinkValidationResult( 
LinkcheckFileResult.ERROR_LEVEL, false, hm.getStatusCode(),
                                                  hm.getStatusText() );
-
         }
         catch ( Throwable t )
         {
+            String msg = "Received: [" + t + "] for [" + link + "] in page [" 
+ lvi.getSource() + "]";
             if ( LOG.isDebugEnabled() )
             {
-                LOG.debug( "Received: [" + t + "] for [" + link + "] in page 
[" + lvi.getSource() + "]", t );
+                LOG.debug( msg, t );
             }
             else
             {
-                LOG.error( "Received: [" + t + "] for [" + link + "] in page 
[" + lvi.getSource() + "]" );
+                LOG.error( msg );
             }
 
             return new LinkValidationResult( LinkcheckFileResult.ERROR_LEVEL, 
false, t.getMessage() );
         }
+        finally
+        {
+            System.getProperties().remove( HttpMethodParams.USER_AGENT );
+
+            if ( this.http.getHttpClientParameters() != null )
+            {
+                for ( Iterator it = 
this.http.getHttpClientParameters().entrySet().iterator(); it.hasNext(); )
+                {
+                    Map.Entry entry = (Map.Entry) it.next();
+
+                    if ( entry.getValue() != null )
+                    {
+                        System.getProperties().remove( 
entry.getKey().toString() );
+                    }
+                }
+            }
+        }
     }
 
     /** Initialize the HttpClient. */
     private void initHttpClient()
     {
-        if ( LOG.isDebugEnabled() )
-        {
-            LOG.debug( "A new HttpClient instance is needed ..." );
-        }
-
-        // Some web servers don't allow the default user-agent sent by 
httpClient
-        System.setProperty( "httpclient.useragent", "Mozilla/4.0 (compatible; 
MSIE 6.0; Windows NT 5.0)" );
+        LOG.debug( "A new HttpClient instance is needed ..." );
 
         this.cl = new HttpClient( new MultiThreadedHttpConnectionManager() );
 
+        // Default params
+        if ( this.http.getTimeout() != 0 )
+        {
+            
this.cl.getHttpConnectionManager().getParams().setConnectionTimeout( 
this.http.getTimeout() );
+            this.cl.getHttpConnectionManager().getParams().setSoTimeout( 
this.http.getTimeout() );
+        }
+        this.cl.getParams().setBooleanParameter( 
HttpClientParams.ALLOW_CIRCULAR_REDIRECTS, true );
+
         HostConfiguration hc = new HostConfiguration();
 
         HttpState state = new HttpState();
-
         if ( StringUtils.isNotEmpty( this.http.getProxyHost() ) )
         {
             hc.setProxy( this.http.getProxyHost(), this.http.getProxyPort() );
 
-            if ( LOG.isDebugEnabled() )
-            {
-                LOG.debug( "Proxy Host:" + this.http.getProxyHost() );
-                LOG.debug( "Proxy Port:" + this.http.getProxyPort() );
-            }
+            LOG.debug( "Proxy Host:" + this.http.getProxyHost() );
+            LOG.debug( "Proxy Port:" + this.http.getProxyPort() );
 
             if ( StringUtils.isNotEmpty( this.http.getProxyUser() ) && 
this.http.getProxyPassword() != null )
             {
-                if ( LOG.isDebugEnabled() )
-                {
-                    LOG.debug( "Proxy User:" + this.http.getProxyUser() );
-                }
+                LOG.debug( "Proxy User:" + this.http.getProxyUser() );
 
                 Credentials credentials;
-
                 if ( StringUtils.isNotEmpty( this.http.getProxyNtlmHost() ) )
                 {
-                    credentials = new NTCredentials( this.http.getProxyUser(), 
this.http.getProxyPassword(), this.http
-                        .getProxyNtlmHost(), this.http.getProxyNtlmDomain() );
+                    credentials =
+                        new NTCredentials( this.http.getProxyUser(), 
this.http.getProxyPassword(),
+                                           this.http.getProxyNtlmHost(), 
this.http.getProxyNtlmDomain() );
                 }
                 else
                 {
-                    credentials = new UsernamePasswordCredentials( 
this.http.getProxyUser(), this.http
-                        .getProxyPassword() );
+                    credentials =
+                        new UsernamePasswordCredentials( 
this.http.getProxyUser(), this.http.getProxyPassword() );
                 }
 
                 state.setProxyCredentials( AuthScope.ANY, credentials );
             }
-
         }
         else
         {
-            if ( LOG.isDebugEnabled() )
-            {
-                LOG.debug( "Not using a proxy" );
-            }
+            LOG.debug( "Not using a proxy" );
         }
 
         this.cl.setHostConfiguration( hc );
-
         this.cl.setState( state );
 
-        if ( LOG.isDebugEnabled() )
-        {
-            LOG.debug( "New HttpClient instance created." );
-        }
+        LOG.debug( "New HttpClient instance created." );
     }
 
     /**
@@ -305,13 +312,29 @@
     private HttpMethod checkLink( String link, int nbRedirect )
         throws IOException
     {
-        if ( nbRedirect > MAX_NB_REDIRECT )
+        int max = MAX_NB_REDIRECT;
+        if ( this.http.getHttpClientParameters() != null
+            && this.http.getHttpClientParameters().get( 
HttpClientParams.MAX_REDIRECTS ) != null )
         {
-            throw new HttpException( "Maximum number of redirections (" + 
MAX_NB_REDIRECT + ") exceeded" );
+            try
+            {
+                max =
+                    Integer.valueOf(
+                                     this.http.getHttpClientParameters().get( 
HttpClientParams.MAX_REDIRECTS )
+                                              .toString() ).intValue();
+            }
+            catch ( NumberFormatException e )
+            {
+                LOG.warn( "HttpClient parameter '" + 
HttpClientParams.MAX_REDIRECTS
+                    + "' is not a number. Ignoring" );
+            }
+        }
+        if ( nbRedirect > max )
+        {
+            throw new HttpException( "Maximum number of redirections (" + max 
+ ") exceeded" );
         }
 
         HttpMethod hm;
-
         if ( HEAD_METHOD.equalsIgnoreCase( this.http.getMethod() ) )
         {
             hm = new HeadMethod( link );
@@ -322,17 +345,15 @@
         }
         else
         {
-            if ( LOG.isErrorEnabled() )
-            {
-                LOG.error( "Unsupported method: " + this.http.getMethod() + ", 
using 'get'." );
-            }
+            LOG.error( "Unsupported method: " + this.http.getMethod() + ", 
using 'get'." );
             hm = new GetMethod( link );
         }
 
+        // Default
+        hm.setFollowRedirects( this.http.isFollowRedirects() );
+
         try
         {
-            hm.setFollowRedirects( this.http.isFollowRedirects() );
-
             URL url = new URL( link );
 
             cl.getHostConfiguration().setHost( url.getHost(), url.getPort(), 
url.getProtocol() );
@@ -340,28 +361,23 @@
             cl.executeMethod( hm );
 
             StatusLine sl = hm.getStatusLine();
-
             if ( sl == null )
             {
-                if ( LOG.isErrorEnabled() )
-                {
-                    LOG.error( "Unknown error validating link : " + link );
-                }
+                LOG.error( "Unknown error validating link : " + link );
+
                 return null;
             }
 
             if ( hm.getStatusCode() == HttpStatus.SC_MOVED_PERMANENTLY
-                            || hm.getStatusCode() == 
HttpStatus.SC_MOVED_TEMPORARILY
-                            || hm.getStatusCode() == 
HttpStatus.SC_TEMPORARY_REDIRECT )
+                || hm.getStatusCode() == HttpStatus.SC_MOVED_TEMPORARILY
+                || hm.getStatusCode() == HttpStatus.SC_TEMPORARY_REDIRECT )
             {
                 Header locationHeader = hm.getResponseHeader( "location" );
 
                 if ( locationHeader == null )
                 {
-                    if ( LOG.isErrorEnabled() )
-                    {
-                        LOG.error( "Site sent redirect, but did not set 
Location header" );
-                    }
+                    LOG.error( "Site sent redirect, but did not set Location 
header" );
+
                     return hm;
                 }
 
@@ -376,7 +392,7 @@
 
                         newLink =
                             oldUrl.getProtocol() + "://" + oldUrl.getHost()
-                                            + ( oldUrl.getPort() > 0 ? ":" + 
oldUrl.getPort() : "" ) + newLink;
+                                + ( oldUrl.getPort() > 0 ? ":" + 
oldUrl.getPort() : "" ) + newLink;
                     }
                     else
                     {
@@ -386,10 +402,7 @@
 
                 HttpMethod oldHm = hm;
 
-                if ( LOG.isDebugEnabled() )
-                {
-                    LOG.debug( "[" + link + "] is redirected to [" + newLink + 
"]" );
-                }
+                LOG.debug( "[" + link + "] is redirected to [" + newLink + "]" 
);
 
                 oldHm.releaseConnection();
 


Reply via email to