diff --git a/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ClassBasedValidatorDescriptor.java b/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ClassBasedValidatorDescriptor.java index fd5f8c96ce..5fc6530cd6 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ClassBasedValidatorDescriptor.java +++ b/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ClassBasedValidatorDescriptor.java @@ -52,6 +52,15 @@ public static ClassBasedValidatorDescriptor of(Class( validatorClass ); } + /** + * Constraint checking is relaxed for built-in constraints as they have been carefully crafted so we are sure types + * are right. + */ + public static ClassBasedValidatorDescriptor ofBuiltin(Class> validatorClass, + Class registeredConstraintAnnotationType) { + return new ClassBasedValidatorDescriptor( validatorClass ); + } + private static EnumSet determineValidationTargets(Class> validatorClass) { SupportedValidationTarget supportedTargetAnnotation = validatorClass.getAnnotation( SupportedValidationTarget.class ); diff --git a/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintValidatorDescriptor.java b/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintValidatorDescriptor.java index cb4da5b2ec..5cf692e8d4 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintValidatorDescriptor.java +++ b/engine/src/main/java/org/hibernate/validator/internal/engine/constraintvalidation/ConstraintValidatorDescriptor.java @@ -49,6 +49,11 @@ static ConstraintValidatorDescriptor forClass(Class ConstraintValidatorDescriptor forBuiltinClass(Class> validatorClass, + Class constraintAnnotationType) { + return ClassBasedValidatorDescriptor.ofBuiltin( validatorClass, constraintAnnotationType ); + } + static ConstraintValidatorDescriptor forLambda(Class annotationType, Type validatedType, ValidationCallable lambda) { return new LambdaBasedValidatorDescriptor<>( validatedType, lambda ); } diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/core/ConstraintHelper.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/core/ConstraintHelper.java index 03d0a458ef..82e60f7a1b 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/core/ConstraintHelper.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/core/ConstraintHelper.java @@ -815,7 +815,7 @@ private static void putBuiltinConstraint(Map void putBuiltinConstraint(Map, List>> validators, Class constraintType, Class> validatorType) { - validators.put( constraintType, Collections.singletonList( ConstraintValidatorDescriptor.forClass( validatorType, constraintType ) ) ); + validators.put( constraintType, Collections.singletonList( ConstraintValidatorDescriptor.forBuiltinClass( validatorType, constraintType ) ) ); } private static void putBuiltinConstraints(Map, List>> validators, @@ -823,7 +823,7 @@ private static void putBuiltinConstraints(Map> descriptors = new ArrayList<>( validatorTypes.size() ); for ( Class> validatorType : validatorTypes ) { - descriptors.add( ConstraintValidatorDescriptor.forClass( validatorType, constraintType ) ); + descriptors.add( ConstraintValidatorDescriptor.forBuiltinClass( validatorType, constraintType ) ); } validators.put( constraintType, CollectionHelper.toImmutableList( descriptors ) );