public final <T> Set<ConstraintViolation<T>> validateValue(Class<T> beanType, String propertyName, Object value, Class<?>... groups) {
Contracts.assertNotNull( beanType, MESSAGES.beanTypeCannotBeNull() );
sanityCheckPropertyPath( propertyName );
ValidationOrder validationOrder = determineGroupValidationOrder( groups );
ValidationContext<T, ConstraintViolation<T>> context = ValidationContext.getContextForValidateValue(
beanType,
messageInterpolator,
constraintValidatorFactory,