in commons-digester3-core/src/main/java/org/apache/commons/digester3/annotations/FromAnnotationsRuleModule.java [117:154]
private <A extends Annotation, E extends AnnotatedElement, R extends Rule> void handle( final A annotation, final E element )
{
final Class<?> annotationType = annotation.annotationType();
// check if it is one of the @*.List annotation
if ( annotationType.isAnnotationPresent( DigesterRuleList.class ) )
{
final Annotation[] annotations = getAnnotationsArrayValue( annotation );
if ( annotations != null && annotations.length > 0 )
{
// if it is an annotations array, process them
for ( final Annotation ptr : annotations )
{
handle( ptr, element );
}
}
}
else if ( annotationType.isAnnotationPresent( DigesterRule.class ) )
{
final DigesterRule digesterRule = annotationType.getAnnotation( DigesterRule.class );
// the default behavior if the handler is not specified
final Class<? extends AnnotationHandler<Annotation, AnnotatedElement>> handlerType =
(Class<? extends AnnotationHandler<Annotation, AnnotatedElement>>) digesterRule.handledBy();
try
{
final AnnotationHandler<Annotation, AnnotatedElement> handler =
annotationHandlerFactory.newInstance( handlerType );
// run!
handler.handle( annotation, element, this.rulesBinder );
}
catch ( final Exception e )
{
rulesBinder.addError( e );
}
}
}