Vincent,

Is there a special reason for removing the level.checking for logging
statements, like the one below? You removed a bunch of these.

if ( LOG.isDebugEnabled() )
{
    LOG.debug( "Will use method : [" + bean.getMethod() + "]" );
}

These are logically not necessary, but are put in there for performance
reasons. Only if the logger is in debug mode (in this case) will the 3
String objects it uses actually be created by the JVM. Otherwise no
objects will be created, resulting in slightly enhanced
performance/memory usage. At least if used in heavy loops.



vsive...@apache.org wrote:
> 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:vincent.sive...@gmail.com";>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();
>  
> 
> 
> 


-- 
Dennis Lundberg

Reply via email to