in src/main/java/org/apache/maven/doxia/linkcheck/validation/OnlineHTTPLinkValidator.java [130:248]
public LinkValidationResult validateLink( LinkValidationItem lvi )
{
if ( this.cl == null )
{
initHttpClient();
}
if ( this.http.getHttpClientParameters() != null )
{
for ( Map.Entry<Object, Object> entry : this.http.getHttpClientParameters().entrySet() )
{
if ( entry.getValue() != null )
{
System.setProperty( entry.getKey().toString(), entry.getValue().toString() );
}
}
}
String link = lvi.getLink();
String anchor = "";
int idx = link.indexOf( '#' );
if ( idx != -1 )
{
anchor = link.substring( idx + 1 );
link = link.substring( 0, idx );
}
try
{
if ( link.startsWith( "/" ) )
{
if ( getBaseURL() == null )
{
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" );
}
link = getBaseURL() + link;
}
HttpResponse response = null;
try
{
response = checkLink( link, 0 );
}
catch ( IOException | HttpException ex )
{
LOG.debug( "Received: [" + ex + "] for [" + link + "] in page [" + lvi.getSource() + "]", ex );
return new LinkValidationResult( LinkcheckFileResult.ERROR_LEVEL, false, ex.getClass().getName()
+ " : " + ex.getMessage() );
}
if ( response == null )
{
return new LinkValidationResult( LinkcheckFileResult.ERROR_LEVEL, false,
"Cannot retrieve HTTP Status" );
}
int statusCode = response.getStatusLine().getStatusCode();
if ( statusCode == HttpStatus.SC_OK )
{
// check if the anchor is present
if ( anchor.length() > 0 )
{
String content = EntityUtils.toString( response.getEntity() );
if ( !Anchors.matchesAnchor( content, anchor ) )
{
return new HTTPLinkValidationResult( LinkcheckFileResult.VALID_LEVEL, false,
"Missing anchor '" + anchor + "'" );
}
}
return new HTTPLinkValidationResult( LinkcheckFileResult.VALID_LEVEL, true,
statusCode, response.getStatusLine().getReasonPhrase() );
}
String msg = "Received: [" + statusCode + "] for [" + link + "] in page ["
+ lvi.getSource() + "]";
// If there's a redirection, add a warning
if ( statusCode == HttpStatus.SC_MOVED_PERMANENTLY
|| statusCode == HttpStatus.SC_MOVED_TEMPORARILY
|| statusCode == HttpStatus.SC_TEMPORARY_REDIRECT )
{
LOG.warn( msg );
return new HTTPLinkValidationResult( LinkcheckFileResult.WARNING_LEVEL, true, statusCode,
response.getStatusLine().getReasonPhrase() );
}
LOG.debug( msg );
return new HTTPLinkValidationResult( LinkcheckFileResult.ERROR_LEVEL, false, statusCode,
response.getStatusLine().getReasonPhrase() );
}
catch ( IOException ex )
{
String msg = "Received: [" + ex + "] for [" + link + "] in page [" + lvi.getSource() + "]";
LOG.error( msg, ex );
return new LinkValidationResult( LinkcheckFileResult.ERROR_LEVEL, false, ex.getMessage() );
}
finally
{
if ( this.http.getHttpClientParameters() != null )
{
for ( Map.Entry<Object, Object> entry : this.http.getHttpClientParameters().entrySet() )
{
if ( entry.getValue() != null )
{
System.getProperties().remove( entry.getKey().toString() );
}
}
}
}
}