in src/main/java/org/apache/maven/doxia/linkcheck/DefaultLinkCheck.java [466:590]
private void check( LinkcheckFile linkcheckFile )
{
linkcheckFile.setSuccessful( 0 );
linkcheckFile.setUnsuccessful( 0 );
if ( LOG.isDebugEnabled() )
{
LOG.debug( "Validating " + linkcheckFile.getRelativePath() );
}
final Set<String> hrefs;
try
{
hrefs = LinkMatcher.match( new File( linkcheckFile.getAbsolutePath() ), encoding );
}
catch ( StackOverflowError | IOException t )
{
// There is a chance that the domReader will throw
// a stack overflow exception for some files
LOG.error( "Received: [" + t + "] in page [" + linkcheckFile.getRelativePath() + "]" );
LOG.debug( t.getMessage(), t );
LinkcheckFileResult lcr = new LinkcheckFileResult();
lcr.setStatus( "PARSE FAILURE" );
lcr.setTarget( "N/A" );
linkcheckFile.addResult( lcr );
return;
}
for ( String href : hrefs )
{
LinkcheckFileResult lcr = new LinkcheckFileResult();
LinkValidationItem lvi = new LinkValidationItem( new File( linkcheckFile.getAbsolutePath() ), href );
LinkValidationResult result = lvm.validateLink( lvi );
lcr.setTarget( href );
lcr.setErrorMessage( result.getErrorMessage() );
switch ( result.getStatus() )
{
case LinkcheckFileResult.VALID_LEVEL:
linkcheckFile.setSuccessful( linkcheckFile.getSuccessful() + 1 );
lcr.setStatus( LinkcheckFileResult.VALID );
// At some point we won't want to store valid links. The tests require that we do at present.
linkcheckFile.addResult( lcr );
break;
case LinkcheckFileResult.ERROR_LEVEL:
boolean ignoredError = false;
if ( result instanceof HTTPLinkValidationResult )
{
HTTPLinkValidationResult httpResult = (HTTPLinkValidationResult) result;
if ( httpResult.getHttpStatusCode() > 0
&& getExcludedHttpStatusErrors() != null
&& StringUtils.indexOfAny( String.valueOf( httpResult.getHttpStatusCode() ),
toStringArray( getExcludedHttpStatusErrors() ) ) >= 0 )
{
ignoredError = true;
}
}
if ( ignoredError )
{
linkcheckFile.setSuccessful( linkcheckFile.getSuccessful() + 1 );
}
else
{
linkcheckFile.setUnsuccessful( linkcheckFile.getUnsuccessful() + 1 );
}
lcr.setStatus( ignoredError ? LinkcheckFileResult.VALID : LinkcheckFileResult.ERROR );
linkcheckFile.addResult( lcr );
break;
case LinkcheckFileResult.WARNING_LEVEL:
boolean ignoredWarning = false;
if ( result instanceof HTTPLinkValidationResult )
{
HTTPLinkValidationResult httpResult = (HTTPLinkValidationResult) result;
if ( httpResult.getHttpStatusCode() > 0
&& getExcludedHttpStatusWarnings() != null
&& StringUtils.indexOfAny( String.valueOf( httpResult.getHttpStatusCode() ),
toStringArray( getExcludedHttpStatusWarnings() ) ) >= 0 )
{
ignoredWarning = true;
}
}
if ( ignoredWarning )
{
linkcheckFile.setSuccessful( linkcheckFile.getSuccessful() + 1 );
}
else
{
linkcheckFile.setUnsuccessful( linkcheckFile.getUnsuccessful() + 1 );
}
lcr.setStatus( ignoredWarning ? LinkcheckFileResult.VALID : LinkcheckFileResult.WARNING );
linkcheckFile.addResult( lcr );
break;
case LinkcheckFileResult.UNKNOWN_LEVEL:
default:
linkcheckFile.setUnsuccessful( linkcheckFile.getUnsuccessful() + 1 );
lcr.setStatus( LinkcheckFileResult.UNKNOWN );
linkcheckFile.addResult( lcr );
break;
}
}
}