package org.apereo.cas.util.spring; import org.springframework.validation.beanvalidation.BeanValidationPostProcessor; import java.lang.annotation.ElementType; import javax.validation.Configuration; import javax.validation.Path; import javax.validation.Path.Node; import javax.validation.TraversableResolver; import javax.validation.Validation; import javax.validation.Validator; /** * Provides a custom {@link javax.validation.TraversableResolver} that should work in JPA2 environments without the JPA2 * restrictions (i.e. getters for all properties). * * @author Scott Battaglia * @since 3.4 * */ public class CustomBeanValidationPostProcessor extends BeanValidationPostProcessor { /** * Instantiates a new custom bean validation post processor. */ public CustomBeanValidationPostProcessor() { setAfterInitialization(true); final Configuration<?> configuration = Validation.byDefaultProvider().configure(); configuration.traversableResolver(new TraversableResolver() { @Override public boolean isReachable(final Object traversableObject, final Node traversableProperty, final Class<?> rootBeanType, final Path pathToTraversableObject, final ElementType elementType) { return true; } @Override public boolean isCascadable(final Object traversableObject, final Node traversableProperty, final Class<?> rootBeanType, final Path pathToTraversableObject, final ElementType elementType) { return true; } }); final Validator validator = configuration.buildValidatorFactory().getValidator(); setValidator(validator); } }