diff --git a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/CascadableConstraintMappingContextImplBase.java b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/CascadableConstraintMappingContextImplBase.java index 8b2cbd8af6..a4f345db93 100644 --- a/engine/src/main/java/org/hibernate/validator/internal/cfg/context/CascadableConstraintMappingContextImplBase.java +++ b/engine/src/main/java/org/hibernate/validator/internal/cfg/context/CascadableConstraintMappingContextImplBase.java @@ -167,13 +167,7 @@ protected CascadingTypeParameter getCascadingMetaData() { } } - - boolean isArray = TypeHelper.isArray( configuredType ); - CascadingTypeParameter cascadingMetaData = isArray - ? CascadingTypeParameter.arrayElement( configuredType, isCascading, typeParametersCascadingMetaData, groupConversions ) - : CascadingTypeParameter.annotatedObject( configuredType, isCascading, typeParametersCascadingMetaData, groupConversions ); - - return cascadingMetaData; + return CascadingTypeParameter.annotatedObject( configuredType, isCascading, typeParametersCascadingMetaData, groupConversions ); } private static class ContainerElementPathKey { diff --git a/engine/src/test/java/org/hibernate/validator/test/cfg/CascadingWithConstraintMappingTest.java b/engine/src/test/java/org/hibernate/validator/test/cfg/CascadingWithConstraintMappingTest.java index ae5c5db4b9..829f6d6aa2 100644 --- a/engine/src/test/java/org/hibernate/validator/test/cfg/CascadingWithConstraintMappingTest.java +++ b/engine/src/test/java/org/hibernate/validator/test/cfg/CascadingWithConstraintMappingTest.java @@ -10,6 +10,7 @@ import static java.lang.annotation.ElementType.FIELD; import static java.lang.annotation.ElementType.METHOD; import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertThat; +import static org.hibernate.validator.testutil.ConstraintViolationAssert.pathWith; import static org.hibernate.validator.testutil.ConstraintViolationAssert.violationOf; import static org.hibernate.validator.testutils.ValidatorUtil.getConfiguration; @@ -113,6 +114,33 @@ public void testProgrammaticCascadingMethodValidation() { ); } + @Test + @TestForIssue(jiraKey = "HV-1442") + public void testProgrammaticCascadingOnArray() { + ConstraintMapping newMapping = config.createConstraintMapping(); + newMapping + .type( Bean.class ) + .property( "property", FIELD ) + .constraint( new NotNullDef() ) + .type( ArrayHolder.class ) + .property( "beans", FIELD ) + .valid(); + config.addMapping( newMapping ); + Validator validator = config.buildValidatorFactory().getValidator(); + + ArrayHolder arrayHolder = new ArrayHolder( new Bean[]{ new Bean( null ) } ); + + Set> violations = validator.validate( arrayHolder ); + + assertThat( violations ).containsOnlyViolations( + violationOf( NotNull.class ) + .withPropertyPath( pathWith() + .property( "beans" ) + .property( "property", true, null, 0, Object[].class, null ) + ) + ); + } + private static class A { protected C c; @@ -131,4 +159,28 @@ public String getString() { return string; } } + + private static class ArrayHolder { + + @SuppressWarnings("unused") + private Bean[] beans; + + private ArrayHolder(Bean[] beans) { + this.beans = beans; + } + } + + private static class Bean { + + private String property; + + private Bean(String property) { + this.property = property; + } + + @SuppressWarnings("unused") + public String getProperty() { + return property; + } + } }