Note that there are some explanatory texts on larger screens.

plurals
  1. POLocalValidatorFactoryBean causing Spring MVC Internal Server Error
    text
    copied!<p>I am using JSR-303 bean validation in a Spring MVC project. Everything works fine when I have a JSR-303 provider on the classpath, and leave all other validation settings in their default modes. I'd like to use spring managed beans in my custom validators, so I have added the following config to the org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean declaration:</p> <pre><code>&lt;property name="jpaPropertyMap"&gt; &lt;map&gt; &lt;entry key="javax.persistence.validation.factory" value-ref="validator" /&gt; &lt;/map&gt; &lt;/property&gt; </code></pre> <p> When this config is used, it seems like beans annotated with @Valid are still validated within MVC controllers, but instead of MVC then catching the validation failures and presenting them on the form, a HTTP 500 error is caused and I get the following stacktrace from tomcat:</p> <pre><code>javax.validation.ConstraintViolationException: Validation failed for classes [xxx.model.WebPage] during update time for groups [javax.validation.groups.Default, ] List of constraint violations:[ ConstraintViolationImpl{interpolatedMessage='may not be empty', propertyPath=title, rootBeanClass=class xxx.model.WebPage, messageTemplate='{org.hibernate.validator.constraints.NotEmpty.message}'} ConstraintViolationImpl{interpolatedMessage='{SiteUnique.default}', propertyPath=urlAlias, rootBeanClass=class xxx.model.WebPage, messageTemplate='{SiteUnique.default}'} ] org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:161) org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreUpdate(BeanValidationEventListener.java:102) org.hibernate.action.EntityUpdateAction.preUpdate(EntityUpdateAction.java:237) org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:86) org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265) org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185) org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321) org.hibernate.event.def.DefaultAutoFlushEventListener.onAutoFlush(DefaultAutoFlushEventListener.java:64) org.hibernate.impl.SessionImpl.autoFlushIfRequired(SessionImpl.java:1185) org.hibernate.impl.SessionImpl.list(SessionImpl.java:1261) org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:246) xxx.model.constraints.SiteUniqueValidator.isValid(SiteUniqueValidator.java:97) org.hibernate.validator.engine.ConstraintTree.validateSingleConstraint(ConstraintTree.java:278) org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:153) org.hibernate.validator.engine.ConstraintTree.validateConstraints(ConstraintTree.java:117) org.hibernate.validator.metadata.MetaConstraint.validateConstraint(MetaConstraint.java:84) org.hibernate.validator.engine.ValidatorImpl.validateConstraint(ValidatorImpl.java:452) org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForDefaultGroup(ValidatorImpl.java:397) org.hibernate.validator.engine.ValidatorImpl.validateConstraintsForCurrentGroup(ValidatorImpl.java:361) org.hibernate.validator.engine.ValidatorImpl.validateInContext(ValidatorImpl.java:313) org.hibernate.validator.engine.ValidatorImpl.validate(ValidatorImpl.java:139) org.springframework.validation.beanvalidation.SpringValidatorAdapter.validate(SpringValidatorAdapter.java:86) org.springframework.validation.DataBinder.validate(DataBinder.java:711) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.doBind(HandlerMethodInvoker.java:807) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.resolveHandlerArguments(HandlerMethodInvoker.java:359) org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:171) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:790) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:719) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:669) org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:585) javax.servlet.http.HttpServlet.service(HttpServlet.java:641) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) net.sf.ehcache.constructs.web.filter.CachingFilter.buildPage(CachingFilter.java:302) net.sf.ehcache.constructs.web.filter.SimpleCachingHeadersPageCachingFilter.buildPage(SimpleCachingHeadersPageCachingFilter.java:120) xxx.commons.filters.PageCachingFilter.buildPageInfo(PageCachingFilter.java:64) net.sf.ehcache.constructs.web.filter.CachingFilter.doFilter(CachingFilter.java:216) net.sf.ehcache.constructs.web.filter.Filter.doFilter(Filter.java:86) org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:74) org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) xxx.commons.filters.HttpHeadFilter.doFilter(HttpHeadFilter.java:47) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:369) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109) org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:381) org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:168) org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) </code></pre> <p>Does anyone know why Spring can't process validation errors without displaying an exception when the javax.persistence.validation.factory property is set?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload