in src/main/java/org/apache/commons/validator/ValidatorAction.java [519:591]
boolean executeValidationMethod(
final Field field,
// TODO What is this the correct value type?
// both ValidatorAction and Validator are added as parameters
final Map<String, Object> params,
final ValidatorResults results,
final int pos)
throws ValidatorException {
params.put(Validator.VALIDATOR_ACTION_PARAM, this);
try {
if (this.validationMethod == null) {
synchronized(this) {
final ClassLoader loader = this.getClassLoader(params);
this.loadValidationClass(loader);
this.loadParameterClasses(loader);
this.loadValidationMethod();
}
}
final Object[] paramValues = this.getParameterValues(params);
if (field.isIndexed()) {
this.handleIndexedField(field, pos, paramValues);
}
Object result = null;
try {
result =
validationMethod.invoke(
getValidationClassInstance(),
paramValues);
} catch (IllegalArgumentException | IllegalAccessException e) {
throw new ValidatorException(e.getMessage());
} catch (final InvocationTargetException e) {
if (e.getTargetException() instanceof Exception) {
throw (Exception) e.getTargetException();
}
if (e.getTargetException() instanceof Error) {
throw (Error) e.getTargetException();
}
}
final boolean valid = this.isValid(result);
if (!valid || (valid && !onlyReturnErrors(params))) {
results.add(field, this.name, valid, result);
}
if (!valid) {
return false;
}
// TODO This catch block remains for backward compatibility. Remove
// this for Validator 2.0 when exception scheme changes.
} catch (final Exception e) {
if (e instanceof ValidatorException) {
throw (ValidatorException) e;
}
getLog().error(
"Unhandled exception thrown during validation: " + e.getMessage(),
e);
results.add(field, this.name, false);
return false;
}
return true;
}