Issue Details (XML | Word | Printable)

Key: SM-86
Type: Bug Bug
Status: Open Open
Priority: Minor Minor
Assignee: Matt Raible
Reporter: Pete
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Struts Menu

VelocityMenuDisplayer can fail to initialize Velocity leading to difficult to debug error occurring later.

Created: 22/Aug/07 08:43 AM   Updated: 22/Aug/07 08:53 AM
Component/s: Menu Core
Affects Version/s: 2.4.3
Fix Version/s: 2.4.4

Environment: unix, tomcat 5.5.17


 Description  « Hide
When VelocityMenuDisplayer does its initialize(), there can be a situation where an exception is thrown either :-

- during the try block prior to velocityEngine.init(props); or
- during the velocityEngine.init(props) itself

The Velocity Mailing list suggested the following :-

Quote
"if any Exception occurs then the actual call to velocityEngine.init() never
finishes, the exception is logged, and then the application is allowed
to continue! this is poorly written, because an uninitialized
VelocityEngine (at least in Velocity 1.4) is a *major* problem. they
need to either let the exceptions go, throw a new wrapping exception,
or else try again to init the engine. "

The exception I had was an 'Accessed denied' while trying to write the velocity.log file in a top level directoy.
Although this was logged as a single line, the execution continues with velocity uninitialised, leading to a NullPointerException much later on when a menu is rendered during :-

  protected void displayComponents(MenuComponent menu)
    throws JspException, IOException {
        HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
        Template t;

        try {
            String template = getConfig();

            if (template == null) {
                throw new JspException("You must specify a template using the 'config' attribute.");
            } else {
                log.debug("using template: " + template);
            }

            t = velocityEngine.getTemplate(template);
        } catch (Exception e) {
            String msg = "Error initializing Velocity: " + e.toString();
            log.error(msg, e);
            throw new JspException(msg, e);
        }

giving a difficult to solve exception :-

18 Aug 2007 23:52:37 [TP-Processor1] DEBUG net.sf.navigator.taglib.UseMenuDisplayerTag - setting config to: menuItemCommon.vm - UseMenuDisplayerTag.java:71
18 Aug 2007 23:52:37 [TP-Processor1] DEBUG net.sf.navigator.taglib.UseMenuDisplayerTag - Looking for repository named 'net.sf.navigator.menu.MENU_REPOSITORY' - UseMenuDisplayerTag.java:132
18 Aug 2007 23:52:37 [TP-Processor1] DEBUG net.sf.navigator.taglib.UseMenuDisplayerTag - stuffing repository into pageContext... - UseMenuDisplayerTag.java:145
18 Aug 2007 23:52:37 [TP-Processor1] TRACE net.sf.navigator.util.PropertyMessageResources - Initializing, config='menuItemCommon.vm', returnNull=true - PropertyMessageResources.java:83
18 Aug 2007 23:52:37 [TP-Processor1] DEBUG net.sf.navigator.displayer.VelocityMenuDisplayer - using template: menuItemCommon.vm - VelocityMenuDisplayer.java:102
18 Aug 2007 23:52:37 [TP-Processor1] ERROR net.sf.navigator.displayer.VelocityMenuDisplayer - Error initializing Velocity: java.lang.NullPointerException - VelocityMenuDisplayer.java:108
java.lang.NullPointerException
        at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:831)
        at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:813)
        at org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:470)
        at net.sf.navigator.displayer.VelocityMenuDisplayer.displayComponents(VelocityMenuDisplayer.java:105)
        at net.sf.navigator.displayer.VelocityMenuDisplayer.display(VelocityMenuDisplayer.java:87)
        at net.sf.navigator.taglib.DisplayMenuTag.doStartTag(DisplayMenuTag.java:100)
        at net.sf.navigator.taglib.el.DisplayMenuTag.doStartTag(DisplayMenuTag.java:45)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspx_meth_menu_displayMenu_0(mainLayout_jsp.java:293)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspx_meth_menu_useMenuDisplayer_0(mainLayout_jsp.java:259)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspService(mainLayout_jsp.java:124)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
        at com.opensymphony.module.sitemesh.filter.PageFilter.writeDecorator(PageFilter.java:173)
        at com.opensymphony.module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java:158)
        at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:216)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:195)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
        at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:90)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        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.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
18 Aug 2007 23:52:37 [TP-Processor1] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/marj].[jsp] - Servlet.service() for servlet jsp threw exception - ApplicationDispatcher.java:704
java.lang.NullPointerException
        at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:831)
        at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:813)
        at org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:470)
        at net.sf.navigator.displayer.VelocityMenuDisplayer.displayComponents(VelocityMenuDisplayer.java:105)
        at net.sf.navigator.displayer.VelocityMenuDisplayer.display(VelocityMenuDisplayer.java:87)
        at net.sf.navigator.taglib.DisplayMenuTag.doStartTag(DisplayMenuTag.java:100)
        at net.sf.navigator.taglib.el.DisplayMenuTag.doStartTag(DisplayMenuTag.java:45)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspx_meth_menu_displayMenu_0(mainLayout_jsp.java:293)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspx_meth_menu_useMenuDisplayer_0(mainLayout_jsp.java:259)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspService(mainLayout_jsp.java:124)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
        at com.opensymphony.module.sitemesh.filter.PageFilter.writeDecorator(PageFilter.java:173)
        at com.opensymphony.module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java:158)
        at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:216)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:195)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
        at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:90)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        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.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)
18 Aug 2007 23:52:37 [TP-Processor1] DEBUG org.acegisecurity.context.HttpSessionContextIntegrationFilter - SecurityContextHolder set to new context, as request processing completed - HttpSessionContextIntegrationFilter.java:257
18 Aug 2007 23:52:37 [TP-Processor1] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/marj].[dispatcher] - Servlet.service() for servlet dispatcher threw exception - StandardWrapperValve.java:253
java.lang.NullPointerException
        at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:831)
        at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:813)
        at org.apache.velocity.app.VelocityEngine.getTemplate(VelocityEngine.java:470)
        at net.sf.navigator.displayer.VelocityMenuDisplayer.displayComponents(VelocityMenuDisplayer.java:105)
        at net.sf.navigator.displayer.VelocityMenuDisplayer.display(VelocityMenuDisplayer.java:87)
        at net.sf.navigator.taglib.DisplayMenuTag.doStartTag(DisplayMenuTag.java:100)
        at net.sf.navigator.taglib.el.DisplayMenuTag.doStartTag(DisplayMenuTag.java:45)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspx_meth_menu_displayMenu_0(mainLayout_jsp.java:293)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspx_meth_menu_useMenuDisplayer_0(mainLayout_jsp.java:259)
        at org.apache.jsp.common.decorator.mainLayout_jsp._jspService(mainLayout_jsp.java:124)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)
        at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:574)
        at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:499)
        at com.opensymphony.module.sitemesh.filter.PageFilter.writeDecorator(PageFilter.java:173)
        at com.opensymphony.module.sitemesh.filter.PageFilter.applyDecorator(PageFilter.java:158)
        at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:264)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
        at org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:110)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:216)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:195)
        at org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:274)
        at org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:148)
        at org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:90)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
        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.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
        at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
        at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
        at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
        at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
        at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
        at java.lang.Thread.run(Thread.java:595)



Sort Order: Ascending order - Click to sort in descending order
There are no comments yet on this issue.