[opencms-dev] Troubleshooting the opencms.properties file by checking the errors Vector in the CmsSetup Bean ..

Roland Hordos roland at ethicalmachine.com
Thu Jun 5 09:17:01 CEST 2003


Suggestion:  Improve exception handling for missing files

This stems from a recent post ("installation with tomcat"), where I 
discovered the following:

Here's the analysis of their stack trace (also included below):

1)  I can tell the call originated from a JSP page (JasperException).
2)  The root cause points to the following lines of code in CmsSetup. 
 Those lines are:
163:    return ((value = m_ExtProperties.get(key)) != null) ? 
value.toString() : "";
.. which was called by ..
1061:  return this.getExtProperty("defaultContentEncoding");

It's not possible for the null pointer to occur because of a null key 
(it's passed as a constant), and the code specifically handles the case 
of a null property value (for the defaultContentEncoding key).  This 
leaves us with the m_ExtProperties object as the likely culprit. 
 Looking further, this object is private, and is created in the 
"initProperties" method.  This is called as the first line of jsp code 
in the index.jsp page of the ocsetup wizard, the page executed before 
the content_encoding.jsp page that caused the exception.  The only line 
of code that could prevent the m_ExtProperties object from being created 
seems to be the one that creates in-line File and FileInputStream 
objects for the opencms.properties file:

    public void initProperties(String props) {
        String path = getConfigFolder() + props;
        try {
            FileInputStream fis = new FileInputStream(new File(path));
            m_ExtProperties = new ExtendedProperties();
            m_ExtProperties.load(fis);
            fis.close();
            m_DbProperties = new Properties();
            
m_DbProperties.load(getClass().getClassLoader().getResourceAsStream("com/opencms/boot/dbsetup.properties"));
        }
        catch (Exception e) {
            e.printStackTrace();
            errors.add(e.toString());
        }
    }

This line:  "FileInputStream fis = new FileInputStream(new File(path));" 
inside a catch-all exception block, where the exception isn't rethrown 
is a great candidate for hidden errors and unpredictable behaviour such 
as that reported.  A search for reference to the "errors" vector did not 
show up much, so I assume this exception info may never surface.  I now 
see in the ocsetup/index.jsp that it attempts to handle exceptions 
originating during initialization, though the initProperties method does 
not re-throw IO exceptions (nor any other).

Overall I'm finding that this code is very well written, nicely 
documented, and it's easy to find your way around (IMHO).  Keep up the 
good work.  Any guess on how many man-hours are invested in development?

thanks, Roland;


____________________________
org.apache.jasper.JasperException
    at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:254) 

    at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) 

    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) 

    at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at 
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
    at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 

    at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) 

    at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at 
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
    at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
    at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392) 

    at 
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
    at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619) 

    at java.lang.Thread.run(Thread.java:536)


root cause

java.lang.NullPointerException
    at com.opencms.boot.CmsSetup.getExtProperty(CmsSetup.java:163)
    at 
com.opencms.boot.CmsSetup.getDefaultContentEncoding(CmsSetup.java:1061)
    at 
org.apache.jsp.content_encoding_jsp._jspService(content_encoding_jsp.java:66) 

    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:137)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:210) 

    at 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247) 

    at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193) 

    at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at 
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
    at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 

    at 
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) 

    at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) 

    at 
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643) 

    at 
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
    at 
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
    at 
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
    at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594)
    at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392) 

    at 
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565)
    at 
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619) 

    at java.lang.Thread.run(Thread.java:536)





More information about the opencms-dev mailing list