/* * Hibernate Validator, declare and validate application constraints * * License: Apache License, Version 2.0 * See the license.txt file in the root directory or <http://www.apache.org/licenses/LICENSE-2.0>. */ package org.hibernate.validator.test.internal.engine.traversableresolver; import java.lang.annotation.ElementType; import java.util.Arrays; import java.util.List; import java.util.Set; import javax.validation.Configuration; import javax.validation.ConstraintViolation; import javax.validation.Path; import javax.validation.TraversableResolver; import javax.validation.Valid; import javax.validation.Validator; import org.testng.annotations.Test; import org.hibernate.validator.HibernateValidatorConfiguration; import org.hibernate.validator.constraints.ScriptAssert; import org.hibernate.validator.testutil.TestForIssue; import org.hibernate.validator.testutils.ValidatorUtil; import static org.hibernate.validator.testutil.ConstraintViolationAssert.assertNumberOfViolations; /** * @author Hardy Ferentschik */ public class TraversableResolverTest { @Test @TestForIssue(jiraKey = "HV-524") public void testClassConstraintsAreNotCallingTraversableResolver() { Configuration<HibernateValidatorConfiguration> config = ValidatorUtil.getConfiguration(); config.traversableResolver( new ExceptionThrowingTraversableResolver() ); Validator validator = config.buildValidatorFactory().getValidator(); Set<ConstraintViolation<Bar>> violations = validator.validate( new Bar() ); assertNumberOfViolations( violations, 0 ); } @ScriptAssert(lang = "groovy", script = "return true;") private static class Foo { } private static class Bar { @Valid private List<Foo> foos = Arrays.asList( new Foo(), new Foo() ); } public static class ExceptionThrowingTraversableResolver implements TraversableResolver { @Override public boolean isReachable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) { if ( ElementType.TYPE.equals( elementType ) ) { throw new IllegalArgumentException( "ElementType.TYPE is not allowed as argument type" ); } return true; } @Override public boolean isCascadable(Object traversableObject, Path.Node traversableProperty, Class<?> rootBeanType, Path pathToTraversableObject, ElementType elementType) { if ( ElementType.TYPE.equals( elementType ) ) { throw new IllegalArgumentException( "ElementType.TYPE is not allowed as argument type" ); } return true; } } }