in commons-digester3-core/src/main/java/org/apache/commons/digester3/binder/DefaultRulesBinder.java [63:106]
public void addError( String messagePattern, final Object... arguments )
{
final StackTraceElement[] stackTrace = new Exception().getStackTrace();
StackTraceElement element = null;
int stackIndex = stackTrace.length - 1;
while ( element == null && stackIndex > 0 ) // O(n) there's no better way
{
Class<?> moduleClass;
try
{
// check if the set ClassLoader resolves the Class in the StackTrace
moduleClass = Class.forName( stackTrace[stackIndex].getClassName(), false, this.classLoader );
}
catch ( final ClassNotFoundException e )
{
try
{
// try otherwise with current ClassLoader
moduleClass =
Class.forName( stackTrace[stackIndex].getClassName(), false, this.getClass().getClassLoader() );
}
catch ( final ClassNotFoundException e1 )
{
// Class in the StackTrace can't be found, don't write the file name:line number detail in the
// message
moduleClass = null;
}
}
if ( moduleClass != null && RulesModule.class.isAssignableFrom( moduleClass ) )
{
element = stackTrace[stackIndex];
}
stackIndex--;
}
if ( element != null )
{
messagePattern = format( "%s (%s:%s)", messagePattern, element.getFileName(), element.getLineNumber() );
}
addError( new ErrorMessage( messagePattern, arguments ) );
}