Hello again.

   Just found another possible bug in the Bean Validation integration. See
the error stack trace:

2010-12-28 13:18:40,983 [btpool0-1] ERROR
tapestry.render.br.com.eteg.cromoup.pages.acesso.EditarPermissao - Render
queue error in BeginRender[acesso/EditarPermissao:nome]: Class cannot be
null
org.apache.tapestry5.ioc.internal.util.TapestryException: Class cannot be
null [at classpath:br/com/eteg/cromoup/pages/acesso/EditarPermissao.tml,
line 19]
    at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:194)
    at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeginRenderPhase.render(ComponentPageElementImpl.java:246)
    at
org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
    at
org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:127)
    at
$PageRenderQueue_12d2d8ecf2c.render($PageRenderQueue_12d2d8ecf2c.java)
    at
$PageRenderQueue_12d2d8ecf24.render($PageRenderQueue_12d2d8ecf24.java)
    at
org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37)
    at
org.apache.tapestry5.beanvalidator.BeanValidatorModule$2.renderMarkup(BeanValidatorModule.java:133)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:2026)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:2040)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:2089)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:2073)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:2055)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$24.renderMarkup(TapestryModule.java:2008)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$23.renderMarkup(TapestryModule.java:1989)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
$MarkupRenderer_12d2d8ecf2b.renderMarkup($MarkupRenderer_12d2d8ecf2b.java)
    at
org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47)
    at
$PageMarkupRenderer_12d2d8ecf29.renderPageMarkup($PageMarkupRenderer_12d2d8ecf29.java)
    at
org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:67)
    at
$PageResponseRenderer_12d2d8ece55.renderPageResponse($PageResponseRenderer_12d2d8ece55.java)
    at
org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:64)
    at
org.apache.tapestry5.services.TapestryModule$36.handle(TapestryModule.java:2326)
    at
$PageRenderRequestHandler_12d2d8ece57.handle($PageRenderRequestHandler_12d2d8ece57.java)
    at
$PageRenderRequestHandler_12d2d8ece51.handle($PageRenderRequestHandler_12d2d8ece51.java)
    at
org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48)
    at
org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47)
    at
$ComponentRequestHandler_12d2d8ece52.handlePageRender($ComponentRequestHandler_12d2d8ece52.java)
    at
$ComponentRequestHandler_12d2d8ece36.handlePageRender($ComponentRequestHandler_12d2d8ece36.java)
    at
org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45)
    at $Dispatcher_12d2d8ece38.dispatch($Dispatcher_12d2d8ece38.java)
    at $Dispatcher_12d2d8ece33.dispatch($Dispatcher_12d2d8ece33.java)
    at
org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:321)
    at
org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at
org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:984)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at
org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:974)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at
org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at br.com.eteg.cromoup.services.AppModule$1.service(AppModule.java:77)
    at $RequestFilter_12d2d8ece2f.service($RequestFilter_12d2d8ece2f.java)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90)
    at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:80)
    at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
    at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at $RequestHandler_12d2d8ece29.service($RequestHandler_12d2d8ece29.java)
    at
org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:272)
    at
org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53)
    at
$HttpServletRequestHandler_12d2d8ece2b.service($HttpServletRequestHandler_12d2d8ece2b.java)
    at
org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
    at
$HttpServletRequestFilter_12d2d8ece28.service($HttpServletRequestFilter_12d2d8ece28.java)
    at
$HttpServletRequestHandler_12d2d8ece2b.service($HttpServletRequestHandler_12d2d8ece2b.java)
    at
org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:928)
    at
$HttpServletRequestHandler_12d2d8ece2b.service($HttpServletRequestHandler_12d2d8ece2b.java)
    at
$HttpServletRequestHandler_12d2d8ece26.service($HttpServletRequestHandler_12d2d8ece26.java)
    at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:147)
    at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
    at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
    at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
br.com.eteg.cromoup.springsecurity.filters.UltimoLoginFilter.doFilterInternal(UltimoLoginFilter.java:41)
    at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
    at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
    at
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    at
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    at
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
    at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:722)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:404)
    at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
    at org.mortbay.jetty.Server.handle(Server.java:324)
    at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
Caused by: java.lang.IllegalArgumentException: Class cannot be null
    at
org.hibernate.validator.metadata.BeanMetaDataCache.getBeanMetaData(BeanMetaDataCache.java:40)
    at
org.hibernate.validator.engine.ValidatorImpl.getBeanMetaData(ValidatorImpl.java:726)
    at
org.hibernate.validator.engine.ValidatorImpl.getConstraintsForClass(ValidatorImpl.java:153)
    at
org.apache.tapestry5.internal.beanvalidator.BeanFieldValidator.render(BeanFieldValidator.java:84)
    at
org.apache.tapestry5.internal.services.CompositeFieldValidator.render(CompositeFieldValidator.java:45)
    at
org.apache.tapestry5.corelib.base.AbstractTextField.begin(AbstractTextField.java:175)
    at
org.apache.tapestry5.corelib.base.AbstractTextField$MethodAccess_begin_12d2d8ececa.invoke(AbstractTextField$MethodAccess_begin_12d2d8ececa.java)
    at
org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$Invoker.invoke(RenderPhaseMethodWorker.java:117)
    at
org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$RenderPhaseMethodAdvice.advise(RenderPhaseMethodWorker.java:86)
    at
org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:86)
    at
org.apache.tapestry5.corelib.base.AbstractTextField.beginRender(AbstractTextField.java)
    at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeginRenderPhase.invokeComponent(ComponentPageElementImpl.java:239)
    at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:186)
    ... 116 more
2010-12-28 13:18:41,009 [btpool0-1] ERROR
org.apache.tapestry5.services.TapestryModule.RequestExceptionHandler -
Processing of request failed with uncaught exception: Render queue error in
BeginRender[acesso/EditarPermissao:nome]: Class cannot be null
org.apache.tapestry5.internal.services.RenderQueueException: Render queue
error in BeginRender[acesso/EditarPermissao:nome]: Class cannot be null [at
classpath:br/com/eteg/cromoup/pages/acesso/EditarPermissao.tml, line 19]
    at
org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:84)
    at
org.apache.tapestry5.internal.services.PageRenderQueueImpl.render(PageRenderQueueImpl.java:127)
    at
$PageRenderQueue_12d2d8ecf2c.render($PageRenderQueue_12d2d8ecf2c.java)
    at
$PageRenderQueue_12d2d8ecf24.render($PageRenderQueue_12d2d8ecf24.java)
    at
org.apache.tapestry5.internal.services.MarkupRendererTerminator.renderMarkup(MarkupRendererTerminator.java:37)
    at
org.apache.tapestry5.beanvalidator.BeanValidatorModule$2.renderMarkup(BeanValidatorModule.java:133)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$25.renderMarkup(TapestryModule.java:2026)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$26.renderMarkup(TapestryModule.java:2040)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$29.renderMarkup(TapestryModule.java:2089)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$28.renderMarkup(TapestryModule.java:2073)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$27.renderMarkup(TapestryModule.java:2055)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$24.renderMarkup(TapestryModule.java:2008)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
org.apache.tapestry5.services.TapestryModule$23.renderMarkup(TapestryModule.java:1989)
    at
$MarkupRenderer_12d2d8ecf2e.renderMarkup($MarkupRenderer_12d2d8ecf2e.java)
    at
$MarkupRenderer_12d2d8ecf2b.renderMarkup($MarkupRenderer_12d2d8ecf2b.java)
    at
org.apache.tapestry5.internal.services.PageMarkupRendererImpl.renderPageMarkup(PageMarkupRendererImpl.java:47)
    at
$PageMarkupRenderer_12d2d8ecf29.renderPageMarkup($PageMarkupRenderer_12d2d8ecf29.java)
    at
org.apache.tapestry5.internal.services.PageResponseRendererImpl.renderPageResponse(PageResponseRendererImpl.java:67)
    at
$PageResponseRenderer_12d2d8ece55.renderPageResponse($PageResponseRenderer_12d2d8ece55.java)
    at
org.apache.tapestry5.internal.services.PageRenderRequestHandlerImpl.handle(PageRenderRequestHandlerImpl.java:64)
    at
org.apache.tapestry5.services.TapestryModule$36.handle(TapestryModule.java:2326)
    at
$PageRenderRequestHandler_12d2d8ece57.handle($PageRenderRequestHandler_12d2d8ece57.java)
    at
$PageRenderRequestHandler_12d2d8ece51.handle($PageRenderRequestHandler_12d2d8ece51.java)
    at
org.apache.tapestry5.internal.services.ComponentRequestHandlerTerminator.handlePageRender(ComponentRequestHandlerTerminator.java:48)
    at
org.apache.tapestry5.services.InitializeActivePageName.handlePageRender(InitializeActivePageName.java:47)
    at
$ComponentRequestHandler_12d2d8ece52.handlePageRender($ComponentRequestHandler_12d2d8ece52.java)
    at
$ComponentRequestHandler_12d2d8ece36.handlePageRender($ComponentRequestHandler_12d2d8ece36.java)
    at
org.apache.tapestry5.internal.services.PageRenderDispatcher.dispatch(PageRenderDispatcher.java:45)
    at $Dispatcher_12d2d8ece38.dispatch($Dispatcher_12d2d8ece38.java)
    at $Dispatcher_12d2d8ece33.dispatch($Dispatcher_12d2d8ece33.java)
    at
org.apache.tapestry5.services.TapestryModule$RequestHandlerTerminator.service(TapestryModule.java:321)
    at
org.apache.tapestry5.internal.services.RequestErrorFilter.service(RequestErrorFilter.java:26)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at
org.apache.tapestry5.services.TapestryModule$4.service(TapestryModule.java:984)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at
org.apache.tapestry5.services.TapestryModule$3.service(TapestryModule.java:974)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at
org.apache.tapestry5.internal.services.StaticFilesFilter.service(StaticFilesFilter.java:90)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at br.com.eteg.cromoup.services.AppModule$1.service(AppModule.java:77)
    at $RequestFilter_12d2d8ece2f.service($RequestFilter_12d2d8ece2f.java)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:90)
    at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter$2.invoke(CheckForUpdatesFilter.java:80)
    at
org.apache.tapestry5.ioc.internal.util.ConcurrentBarrier.withRead(ConcurrentBarrier.java:85)
    at
org.apache.tapestry5.internal.services.CheckForUpdatesFilter.service(CheckForUpdatesFilter.java:103)
    at $RequestHandler_12d2d8ece34.service($RequestHandler_12d2d8ece34.java)
    at $RequestHandler_12d2d8ece29.service($RequestHandler_12d2d8ece29.java)
    at
org.apache.tapestry5.services.TapestryModule$HttpServletRequestHandlerTerminator.service(TapestryModule.java:272)
    at
org.apache.tapestry5.internal.gzip.GZipFilter.service(GZipFilter.java:53)
    at
$HttpServletRequestHandler_12d2d8ece2b.service($HttpServletRequestHandler_12d2d8ece2b.java)
    at
org.apache.tapestry5.internal.services.IgnoredPathsFilter.service(IgnoredPathsFilter.java:62)
    at
$HttpServletRequestFilter_12d2d8ece28.service($HttpServletRequestFilter_12d2d8ece28.java)
    at
$HttpServletRequestHandler_12d2d8ece2b.service($HttpServletRequestHandler_12d2d8ece2b.java)
    at
org.apache.tapestry5.services.TapestryModule$2.service(TapestryModule.java:928)
    at
$HttpServletRequestHandler_12d2d8ece2b.service($HttpServletRequestHandler_12d2d8ece2b.java)
    at
$HttpServletRequestHandler_12d2d8ece26.service($HttpServletRequestHandler_12d2d8ece26.java)
    at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:147)
    at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:368)
    at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:109)
    at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:97)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:100)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:78)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:35)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:177)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
br.com.eteg.cromoup.springsecurity.filters.UltimoLoginFilter.doFilterInternal(UltimoLoginFilter.java:41)
    at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:187)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:83)
    at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:380)
    at
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:169)
    at
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
    at
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
    at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    at
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:113)
    at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
    at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084)
    at
org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360)
    at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
    at
org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
    at
org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:722)
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:404)
    at
org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139)
    at org.mortbay.jetty.Server.handle(Server.java:324)
    at
org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:505)
    at
org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:828)
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:514)
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211)
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:380)
    at
org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:395)
    at
org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:450)
Caused by: org.apache.tapestry5.ioc.internal.util.TapestryException: Class
cannot be null [at
classpath:br/com/eteg/cromoup/pages/acesso/EditarPermissao.tml, line 19]
    at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:194)
    at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeginRenderPhase.render(ComponentPageElementImpl.java:246)
    at
org.apache.tapestry5.internal.services.RenderQueueImpl.run(RenderQueueImpl.java:72)
    ... 114 more
Caused by: java.lang.IllegalArgumentException: Class cannot be null
    at
org.hibernate.validator.metadata.BeanMetaDataCache.getBeanMetaData(BeanMetaDataCache.java:40)
    at
org.hibernate.validator.engine.ValidatorImpl.getBeanMetaData(ValidatorImpl.java:726)
    at
org.hibernate.validator.engine.ValidatorImpl.getConstraintsForClass(ValidatorImpl.java:153)
    at
org.apache.tapestry5.internal.beanvalidator.BeanFieldValidator.render(BeanFieldValidator.java:84)
    at
org.apache.tapestry5.internal.services.CompositeFieldValidator.render(CompositeFieldValidator.java:45)
    at
org.apache.tapestry5.corelib.base.AbstractTextField.begin(AbstractTextField.java:175)
    at
org.apache.tapestry5.corelib.base.AbstractTextField$MethodAccess_begin_12d2d8ececa.invoke(AbstractTextField$MethodAccess_begin_12d2d8ececa.java)
    at
org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$Invoker.invoke(RenderPhaseMethodWorker.java:117)
    at
org.apache.tapestry5.internal.transform.RenderPhaseMethodWorker$RenderPhaseMethodAdvice.advise(RenderPhaseMethodWorker.java:86)
    at
org.apache.tapestry5.internal.services.AbstractComponentMethodInvocation.proceed(AbstractComponentMethodInvocation.java:86)
    at
org.apache.tapestry5.corelib.base.AbstractTextField.beginRender(AbstractTextField.java)
    at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$BeginRenderPhase.invokeComponent(ComponentPageElementImpl.java:239)
    at
org.apache.tapestry5.internal.structure.ComponentPageElementImpl$AbstractPhase.invoke(ComponentPageElementImpl.java:186)
    ... 116 more

   Below is the code that I think is relevant for this bug:

*Entity class

*package br.com.eteg.cromoup.domain.acesso;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.validation.constraints.NotNull;

import org.apache.commons.lang.ObjectUtils;
import org.springframework.roo.addon.entity.RooEntity;
import org.springframework.roo.addon.javabean.RooJavaBean;
import org.springframework.roo.addon.plural.RooPlural;
import org.springframework.roo.addon.tostring.RooToString;

@RooJavaBean
@RooToString
@RooEntity
@RooPlural("permissoes")
@Entity
public class Permissao {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private Long id;

    @NotNull
    @Column(unique = true)
    private String nome;

    @NotNull
    private String descricao;
    private Boolean interno = Boolean.TRUE;

    @ManyToMany(cascade = CascadeType.ALL,fetch=FetchType.LAZY)
    @JoinTable(name = "perfil_permissao", joinColumns = { @JoinColumn(name =
"permissao_id") }, inverseJoinColumns = { @JoinColumn(name = "perfil_id") })
    private Set<Perfil> perfis = new HashSet<Perfil>();

    private AgrupamentoPermissao grupo;

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((getId() == null) ? 0 :
getId().hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Permissao other = (Permissao) obj;
        return ObjectUtils.equals(getId(), other.getId());
    }
}

*AppModule*

    public static void
contributeBeanValidatorSource(OrderedConfiguration<BeanValidatorConfigurer>
configuration) {
        configuration.add("ConfiguradorBeanValidator", new
BeanValidatorConfigurer() {
            public void configure(javax.validation.Configuration<?>
configuration) {
                configuration.ignoreXmlConfiguration();
            }
        });
    }

    public static void
contributeComponentMessagesSource(OrderedConfiguration<Resource>
configuration
        , @ClasspathProvider AssetFactory classpathAssetFactory) {

        Resource root = classpathAssetFactory.getRootResource();
        Resource tapestryBeanValidationCatalog =
root.forFile("TapestryBeanValidationMessages_pt_BR.properties");

        // TODO seria necessário indicar a restrição de posicionamento
(after:, before:)
        //      mas ainda não consigo determinar qual a restrição correta.
:(
        configuration.add("TapestryBeanValidationCatalog",
tapestryBeanValidationCatalog);
    }

*EditarPermissao.java*

package br.com.eteg.cromoup.pages.acesso;

import org.apache.tapestry5.EventConstants;
import org.apache.tapestry5.annotations.InjectPage;
import org.apache.tapestry5.annotations.OnEvent;
import org.apache.tapestry5.annotations.Property;
import org.apache.tapestry5.ioc.Messages;
import org.apache.tapestry5.ioc.annotations.Inject;

import br.com.eteg.cromoup.domain.acesso.Permissao;

public class EditarPermissao {

    @Property
    private Permissao permissao;

    @Inject
    private Messages messages;

    @InjectPage
    private ListarPermissao listarPermissao;

*    void onActivate(Long id) {
        if (id != null) {
            permissao = Permissao.findPermissao(id);
        }
    }
*
    Long onPassivate() {
        return permissao != null ? permissao.getId() : null;
    }

*    @OnEvent(EventConstants.PREPARE)
    void prepararFormulario() {
        if (permissao == null) {
            permissao = new Permissao();
        }
    }
*
    @OnEvent(EventConstants.SUCCESS)
    Object salvar() {
        if (permissao.getId() == null) {
            permissao.persist();
        }
        else {
            permissao.merge();
        }
        return listarPermissao;
    }

    @OnEvent(EventConstants.CANCELED)
    Object cancelar() {
        listarPermissao.limpar();
        return listarPermissao;
    }

    public String getRotuloSalvar() {
        return permissao != null && permissao.getId() != null
            ? messages.get("atualizar-label")
            : messages.get("salvar-label");
    }

}

*EditarPermissao.tml*

        <form t:type="form" *t:validate="permissao"*>
            <t:errors />

            <p>
                <label t:type="label" for="nome" />
                <input t:type="textField" t:id="nome" value="permissao.nome"
/>
            </p>

            <p>
                <label t:type="label" for="descricao" />
                <input t:type="textField" t:id="descricao"
value="permissao.descricao" />
            </p>

            <p>
                <label t:type="label" for="agrupamento" />
                <select t:type="select" t:id="agrupamento"
blankLabel="${message:select-blank-label}" value="permissao.grupo" />
            </p>

            <p>
                <label t:type="label" for="interno" />
                <input t:type="checkbox" t:id="interno"
value="permissao.interno" />
            </p>

            <input type="submit" value="${rotuloSalvar}" />
            <a href="#" t:type="pageLink" t:page="acesso/listarPermissao"
                t:mixins="confirmacaoAcao"
t:mensagemConfirmacao="confirmacao-cancelamento">${message:cancelar-label}</a>
        </form>

   Reading the Form component class (beginRender() method) I found that a
BeanValidationContextImpl is pushed into the Environment before
"prepareForRender" and "prepare" events are triggered. I could handle the
problem combining the code of the methods onActivate() and
prepararFormulario() on the method onActivate(). Yet I think that the
situation represents a bug and maybe it is simple to correct - just
move *environment.push(BeanValidationContext.class,
new BeanValidationContextImpl(validate));* (Form.class line 393) below
*resources.triggerEvent(EventConstants.PREPARE,
context, null);* (Form.class line 408).

   Atenciosamente,

Matheus Eduardo Machado Moreira
matheus....@gmail.com

*Good cooking takes time. If you are made to wait, it is to serve you
better, and to please you.*
Menu do Restaurant Antoine, New Orleans

Reply via email to