in commons-digester3-core/src/main/java/org/apache/commons/digester3/annotations/handlers/AbstractMethodHandler.java [120:163]
public void handle( final A annotation, final Method element, final RulesBinder rulesBinder )
{
if ( SUPPORTED_ARGS != element.getParameterTypes().length )
{
final DigesterRule rule = annotation.annotationType().getAnnotation( DigesterRule.class );
rulesBinder.addError( "Methods annotated with digester annotation rule @%s must have just one argument",
rule.reflectsRule().getName() );
return;
}
final Object explicitTypesObject = getAnnotationValue( annotation );
if ( explicitTypesObject == null || !explicitTypesObject.getClass().isArray()
|| Class.class != explicitTypesObject.getClass().getComponentType() )
{
rulesBinder.addError( "Impossible to apply this handler, @%s.value() has to be of type 'Class<?>[]'",
annotation.getClass().getName() );
return;
}
final Class<?>[] explicitTypes = (Class<?>[]) explicitTypesObject;
final Class<?> paramType = element.getParameterTypes()[0];
final boolean fireOnBegin = getFireOnBegin( annotation );
if ( explicitTypes.length > 0 )
{
for ( final Class<?> explicitType : explicitTypes )
{
if ( !paramType.isAssignableFrom( explicitType ) )
{
rulesBinder.addError( "Impossible to handle annotation %s on method, %s has to be a %s",
annotation, element.toGenericString(), explicitType.getName(),
paramType.getName() );
return;
}
doHandle( annotation, element, explicitType, fireOnBegin, rulesBinder );
}
}
else
{
doHandle( annotation, element, paramType, fireOnBegin, rulesBinder );
}
}