java.lang.NullPointerException
org.apache.catalina.connector.Request.parseParameters(Request.java:2340)
org.apache.catalina.connector.Request.getParameterNames(Request.java:1038)
org.apache.catalina.connector.RequestFacade.getParameterNames(RequestFacade.java:359)
org.apache.tapestry.web.ServletWebRequest.getParameterNames(ServletWebRequest.java:59)
$WebRequest_123a5d0549e.getParameterNames($WebRequest_123a5d0549e.java)
$WebRequest_123a5d05457.getParameterNames($WebRequest_123a5d05457.java)
org.apache.tapestry.services.impl.RequestCycleFactoryImpl.extractParameters(RequestCycleFactoryImpl.java:110)
org.apache.tapestry.services.impl.RequestCycleFactoryImpl.newRequestCycle(RequestCycleFactoryImpl.java:79)
$RequestCycleFactory_123a5d05439.newRequestCycle($RequestCycleFactory_123a5d05439.java)
org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:224)
org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60)
$WebRequestServicer_123a5d0548d.service($WebRequestServicer_123a5d0548d.java)
$WebRequestServicer_123a5d05489.service($WebRequestServicer_123a5d05489.java)
org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56)
$ServletRequestServicer_123a5d0546f.service($ServletRequestServicer_123a5d0546f.java)
org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
$ServletRequestServicerFilter_123a5d0546b.service($ServletRequestServicerFilter_123a5d0546b.java)
$ServletRequestServicer_123a5d05471.service($ServletRequestServicer_123a5d05471.java)
org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
$ServletRequestServicerFilter_123a5d05469.service($ServletRequestServicerFilter_123a5d05469.java)
$ServletRequestServicer_123a5d05471.service($ServletRequestServicer_123a5d05471.java)
org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
$ServletRequestServicerFilter_123a5d0546d.service($ServletRequestServicerFilter_123a5d0546d.java)
$ServletRequestServicer_123a5d05471.service($ServletRequestServicer_123a5d05471.java)
$ServletRequestServicer_123a5d05463.service($ServletRequestServicer_123a5d05463.java)
org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:123)
org.apache.tapestry.ApplicationServlet.doPost(ApplicationServlet.java:168)
javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
But the stack trace from the first time through the bug in my sandbox was revealing:
java.lang.IllegalStateException: Post too large
org.apache.catalina.connector.Request.parseParameters(Request.java:2388)
org.apache.catalina.connector.Request.getParameterNames(Request.java:1047)
org.apache.catalina.connector.RequestFacade.getParameterNames(RequestFacade.java:369)
org.apache.tapestry.web.ServletWebRequest.getParameterNames(ServletWebRequest.java:59)
$WebRequest_124021108bc.getParameterNames($WebRequest_124021108bc.java)
$WebRequest_12402110874.getParameterNames($WebRequest_12402110874.java)
org.apache.tapestry.services.impl.RequestCycleFactoryImpl.extractParameters(RequestCycleFactoryImpl.java:110)
org.apache.tapestry.services.impl.RequestCycleFactoryImpl.newRequestCycle(RequestCycleFactoryImpl.java:79)
$RequestCycleFactory_12402110856.newRequestCycle($RequestCycleFactory_12402110856.java)
org.apache.tapestry.engine.AbstractEngine.service(AbstractEngine.java:224)
org.apache.tapestry.services.impl.InvokeEngineTerminator.service(InvokeEngineTerminator.java:60)
$WebRequestServicer_124021108aa.service($WebRequestServicer_124021108aa.java)
org.apache.tapestry.services.impl.DisableCachingFilter.service(DisableCachingFilter.java:48)
$WebRequestServicerFilter_124021108ac.service($WebRequestServicerFilter_124021108ac.java)
$WebRequestServicer_124021108ae.service($WebRequestServicer_124021108ae.java)
$WebRequestServicer_124021108a6.service($WebRequestServicer_124021108a6.java)
org.apache.tapestry.services.impl.WebRequestServicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56)
$ServletRequestServicer_1240211088c.service($ServletRequestServicer_1240211088c.java)
org.apache.tapestry.request.DecodedRequestInjector.service(DecodedRequestInjector.java:55)
$ServletRequestServicerFilter_12402110888.service($ServletRequestServicerFilter_12402110888.java)
$ServletRequestServicer_1240211088e.service($ServletRequestServicer_1240211088e.java)
org.apache.tapestry.multipart.MultipartDecoderFilter.service(MultipartDecoderFilter.java:52)
$ServletRequestServicerFilter_12402110886.service($ServletRequestServicerFilter_12402110886.java)
$ServletRequestServicer_1240211088e.service($ServletRequestServicer_1240211088e.java)
org.apache.tapestry.services.impl.SetupRequestEncoding.service(SetupRequestEncoding.java:53)
$ServletRequestServicerFilter_1240211088a.service($ServletRequestServicerFilter_1240211088a.java)
$ServletRequestServicer_1240211088e.service($ServletRequestServicer_1240211088e.java)
$ServletRequestServicer_12402110880.service($ServletRequestServicer_12402110880.java)
org.apache.tapestry.ApplicationServlet.doService(ApplicationServlet.java:123)
org.apache.tapestry.ApplicationServlet.doPost(ApplicationServlet.java:168)
javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter.doFilterInternal(OpenEntityManagerInViewFilter.java:112)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
Subsequent runs through the app in my sandbox showed the production stack trace, which totally obscured the error. The lesson here: when you're trying to reproduce a bug, do it in the cleanest environment possible.
The real underlying problem was an extremely large chunk of data that was being persisted by Tapestry 4.0. The page code had pulled out an enormous list of Entities and crammed them into the POST. It should have just passed around some database keys or smaller objects more tailored to the UI.
The fast-and-cheap, sloppy, short-term workaround was to tell Tomcat to bump up its max post size. To do this, edit your tomcat's server.xml