in bval-jsr/src/main/java/org/apache/bval/jsr/job/ValidationJob.java [141:181]
private boolean validate(ConstraintD<?> constraint, Consumer<ConstraintViolation<T>> sink) {
final ConcurrentMap<Path, Set<Object>> pathMap = completedValidations.computeIfAbsent(constraint,
k -> new ConcurrentSkipListMap<>(PathImpl.PATH_COMPARATOR));
final Set<Object> objectSet =
pathMap.computeIfAbsent(context.getPath(), p -> Collections.newSetFromMap(new IdentityHashMap<>()));
if (!objectSet.add(context.getValue())) {
return true;
}
final ConstraintValidator constraintValidator = getConstraintValidator(constraint);
final ConstraintValidatorContextImpl<T> constraintValidatorContext =
new ConstraintValidatorContextImpl<>(this, constraint);
final boolean valid;
if (constraintValidator == null) {
// null validator without exception implies composition:
valid = true;
} else {
try {
constraintValidator.initialize(constraint.getAnnotation());
valid = constraintValidator.isValid(context.getValue(), constraintValidatorContext);
} catch (ValidationException e) {
throw e;
} catch (Exception e) {
throw new ValidationException(e);
}
if (!valid) {
constraintValidatorContext.getRequiredViolations().forEach(sink);
}
}
if (valid || !constraint.isReportAsSingleViolation()) {
final boolean compositionValid = validateComposed(constraint, sink);
if (!compositionValid) {
if (valid && constraint.isReportAsSingleViolation()) {
constraintValidatorContext.getRequiredViolations().forEach(sink);
}
return false;
}
}
return valid;
}