My velocity-struts-1.2 message tool is throwing NPEs, even though it looks to me that my action servlet is being loaded before the velocity servlet.
The velocity faq says that the MessageTool will throw a NullPointerException if the ActionServlet isn't initialized before trying to use struts-tools. I set my ActionServlet to load 1st and my Velocity Servlet to load 3rd. But I still get NullPointerException when I don't have a resource in my resource bundle. So $text.resource.in.bundle displays fine but $text.resource.not.in.bundle gives a null pointer stack trace. Below I've listed my web.xml and a sample stack trace. I'd like to know what I need to do to get the text "$text.resource.not.in.bundle" in my pages instead of a stack trace. Cheers, <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Reservations Web App</display-name> <filter> <filter-name>Set Character Encoding</filter-name> <filter-class>mydomain.reservations.filters.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>Set Character Encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> <init-param> <param-name>config</param-name> <param-value>/WEB-INF/main/strutsConfig.xml, /WEB-INF/hotel/hotelConfig.xml, /WEB-INF/rate/rateConfig.xml, /WEB-INF/room/roomMasterConfig.xml, /WEB-INF/glance/atAGlanceConfig.xml, /WEB-INF/user/userConfig.xml, /WEB-INF/reservation/reservationDetailConfig.xml, /WEB-INF/calendar/calendarConfig.xml, /WEB-INF/plan/planConfig.xml, /WEB-INF/feature/featureConfig.xml, /WEB-INF/member/memberConfig.xml, /WEB-INF/external/externalConfig.xml, /WEB-INF/report/reportConfig.xml </param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>2</param-value> </init-param> <init-param> <param-name>detail</param-name> <param-value>2</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet> <servlet-name>exportServlet</servlet-name> <servlet-class>mydomain.reservations.export.servlet.ExportServlet</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet> <servlet-name>velocity</servlet-name> <servlet-class>org.apache.velocity.tools.view.servlet.VelocityViewServlet</servlet-class> <init-param> <param-name>org.apache.velocity.toolbox</param-name> <param-value>/WEB-INF/toolbox.xml</param-value> </init-param> <init-param> <param-name>org.apache.velocity.properties</param-name> <param-value>/WEB-INF/velocity.properties</param-value> </init-param> <load-on-startup>3</load-on-startup> </servlet> <servlet-mapping> <servlet-name>exportServlet</servlet-name> <url-pattern>/export</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>action</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>velocity</servlet-name> <url-pattern>*.vm</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.vm</welcome-file> </welcome-file-list> <resource-ref> <description>DB Connection</description> <res-ref-name>jdbc/reservationDB</res-ref-name> <res-type>javax.sql.DataSource</res-type> <res-auth>Container</res-auth> </resource-ref> <security-constraint> <web-resource-collection> <web-resource-name>Admin Services</web-resource-name> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>hotelAdmin</role-name> <!--Engineer will be employees companies that re-sell the reservation system to hotels, --> <!-- they have access to hotels the posses--> <role-name>hotelEngineer</role-name> <!--Manager can update plans, room, rate, options, and everything else in an owned hotel internal admin section --> <role-name>hotelManager</role-name> <!--Hotel operators can only access ataglance, report and the order page for owned hotels--> <role-name>hotelOperator</role-name> </auth-constraint> </security-constraint> <login-config> <auth-method>FORM</auth-method> <form-login-config> <form-login-page>/WEB-INF/main/login.vm</form-login-page> <form-error-page>/WEB-INF/main/notAuthenticated.vm</form-error-page> </form-login-config> </login-config> <security-role> <role-name>hotelAdmin</role-name> </security-role> <security-role> <role-name>hotelManager</role-name> </security-role> <security-role> <role-name>hotelOperator</role-name> </security-role> <security-role> <role-name>hotelEngineer</role-name> </security-role> </web-app> VelocityViewServlet : Error processing the template java.lang.NullPointerException at org.apache.velocity.io.VelocityWriter.write(VelocityWriter.java:319) at org.apache.velocity.runtime.parser.node.ASTReference.render(ASTReference.java:291) at org.apache.velocity.runtime.parser.node.SimpleNode.render(SimpleNode.java:230) at org.apache.velocity.Template.merge(Template.java:256) at org.apache.velocity.tools.view.servlet.VelocityViewServlet.performMerge(Unknown Source) at org.apache.velocity.tools.view.servlet.VelocityViewServlet.mergeTemplate(Unknown Source) at org.apache.velocity.tools.view.servlet.VelocityViewServlet.doRequest(Unknown Source) at org.apache.velocity.tools.view.servlet.VelocityViewServlet.doGet(Unknown Source) 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 hakodatecgi.reservations.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:112) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:186) 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.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683) at java.lang.Thread.run(Thread.java:534) --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]