diff --git a/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java b/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java index b65b9457ac..017940f308 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java +++ b/engine/src/main/java/org/hibernate/validator/internal/metadata/provider/AnnotationMetaDataProvider.java @@ -682,9 +682,12 @@ private Map, CascadingMetaDataBuilder> getTypeParametersCascadin Map, CascadingMetaDataBuilder> nestedTypeParametersCascadingMetadata = getTypeParametersCascadingMetaDataForAnnotatedType( annotatedTypeArgument ); + boolean annotatedWithValid = annotatedTypeArgument.isAnnotationPresent( Valid.class ); + if ( annotatedWithValid && annotatedParameterizedType.isAnnotationPresent( Valid.class ) ) { + LOG.validAppliedTwice( annotatedParameterizedType ); + } typeParametersCascadingMetadata.put( typeParameters[i], new CascadingMetaDataBuilder( annotatedParameterizedType.getType(), typeParameters[i], - annotatedTypeArgument.isAnnotationPresent( Valid.class ), nestedTypeParametersCascadingMetadata, - getGroupConversions( annotatedTypeArgument ) ) ); + annotatedWithValid, nestedTypeParametersCascadingMetadata, getGroupConversions( annotatedTypeArgument ) ) ); i++; } diff --git a/engine/src/main/java/org/hibernate/validator/internal/util/logging/Log.java b/engine/src/main/java/org/hibernate/validator/internal/util/logging/Log.java index 590bd2af1c..f10b768371 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/util/logging/Log.java +++ b/engine/src/main/java/org/hibernate/validator/internal/util/logging/Log.java @@ -12,6 +12,7 @@ import java.lang.annotation.Annotation; import java.lang.annotation.ElementType; import java.lang.invoke.MethodHandles.Lookup; +import java.lang.reflect.AnnotatedParameterizedType; import java.lang.reflect.Executable; import java.lang.reflect.Member; import java.lang.reflect.Type; @@ -946,4 +947,8 @@ ConstraintDefinitionException getConstraintValidatorDefinitionConstraintMismatch @LogMessage(level = DEBUG) @Message(id = 269, value = "Unable to enable secure XML feature processing when loading %1$s: %2$s") void unableToEnableSecureFeatureProcessingSchemaXml(String fileName, String message); + + @LogMessage(level = WARN) + @Message(id = 270, value = "For a given container, the `@Valid` annotation should either be put on the container itself or on the type argument(s) of the container, but not both: %s") + void validAppliedTwice(AnnotatedParameterizedType annotatedParameterizedType); } diff --git a/engine/src/test/resources/log4j2.properties b/engine/src/test/resources/log4j2.properties index d4a2ce8010..69039b50a8 100644 --- a/engine/src/test/resources/log4j2.properties +++ b/engine/src/test/resources/log4j2.properties @@ -1,7 +1,8 @@ # License: Apache License, Version 2.0 # See the LICENSE file in the root directory or . - -status = error +rootLogger.level = error +rootLogger.appenderRefs = console +rootLogger.appenderRef.console.ref = console # Direct log messages to stdout appender.console.type = Console