When doing a request.getParameter, or a request.getParameterNames, the Tomcat Server comes up with this message: Dec 14, 2004 11:53:28 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet controller threw exception java.lang.NullPointerException at org.apache.tomcat.util.buf.StringCache$ByteEntry.hashCode(StringCache.java:633) at java.util.HashMap.hash(Unknown Source) at java.util.HashMap.get(Unknown Source) at org.apache.tomcat.util.buf.StringCache.toString(StringCache.java:284) at org.apache.tomcat.util.buf.ByteChunk.toString(ByteChunk.java:461) at org.apache.tomcat.util.http.Parameters.urlDecode(Parameters.java:411) at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:391) at org.apache.tomcat.util.http.Parameters.processParameters(Parameters.java:504) at org.apache.tomcat.util.http.Parameters.handleQueryParameters(Parameters.java:265) at org.apache.catalina.connector.Request.parseParameters(Request.java:2299) at org.apache.catalina.connector.Request.getParameter(Request.java:991) at org.apache.catalina.connector.RequestFacade.getParameter(RequestFacade.java:262) at nl.printfill.controller.Controller.process(Controller.java:86) at nl.printfill.controller.Controller.doGet(Controller.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:731) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684) at java.lang.Thread.run(Unknown Source) This is (part of) the code which procudures the error: HttpSession session = request.getSession(); String actionName = request.getParameter(Action.ACTION); // line 86 if(actionName != null) { Action action = (Action) ActionFactory.getAction(actionName); Erik
Do you see this in conf/catalina.properties: tomcat.util.buf.StringCache.byte.enabled=true ? So you can easily work around the problem.
I don't understand what causes the bug. Can you submit a better test case (similar code runs fine for me) ? It's really odd that you're getting an exception there, because it can only happen if the String value is null, and this should be filtered out before going into the StringCache because it's obviously useless. I could make the code a little bit more defensive, but this should not be needed.
(In reply to comment #2) > I don't understand what causes the bug. Can you submit a better test case > (similar code runs fine for me) ? You could also get it from an unsupported encoding in toStringInternal.
(In reply to comment #1) > Do you see this in conf/catalina.properties: > tomcat.util.buf.StringCache.byte.enabled=true ? > So you can easily work around the problem. Done, which works, but causes other problems like getting 'white pages' on some GET requests. I found out how the problem arrised. When looking in server.xml, was a connector entry: <Connector URIEncoding="null" enableLookups="true" port="9000" redirectPort="-1" backlog="10" disableUploadTimeout="false"> </Connector> As you can see, the URIUncoding is null. I don't know what it means excactly, but I didn't put it there. I used the admin tool to add the connector. I'd like to try to reproduce the problem, but my Admin tool doesn't work anymore. I cannot collapse items (I don't know if I should file this as another bug report, but I cannot say more than: my menuitems don't collapse anymore after adding a new service...) After removing the URIencoding, everything is working fine again, even after re-enabling the StringCache.
(In reply to comment #2) > I don't understand what causes the bug. Can you submit a better test case > (similar code runs fine for me) ? > > It's really odd that you're getting an exception there, because it can only > happen if the String value is null, and this should be filtered out before going > into the StringCache because it's obviously useless. I could make the code a > little bit more defensive, but this should not be needed. ps, please leave the code unchanged. I like the webserver to not when something is not right, instead of eg. continue-ing the webserver and maybe causing some servere errors elsewhere, while not knowing what caused the problem.
(In reply to comment #5) > ps, please leave the code unchanged. I like the webserver to not when something > is not right, instead of eg. continue-ing the webserver and maybe causing some > servere errors elsewhere, while not knowing what caused the problem. > [type] I like the webserver to not when... = I like the webserver to 'crash' when...
Then the cause of the problem is what Bill said: an invalid encoding is used for the String. I think I should be able to reproduce the issue now, and I'll try to see if I can improve the situation. The admin works again in 5.5.6, BTW. I don't know if it handles connectors correctly or not, as I didn't use it at all in the 5.5 branch.
I tried the admin webapp, and while it's probably not perfect for connector handling, it didn't save bad information (such as URIEncoding="null"), and Tomcat operated fine after a restart.