Menu

NullPointerException in interceptor

Help
MisterT
2005-04-19
2013-06-03
  • MisterT

    MisterT - 2005-04-19

    Hi!
    I've got a NullPointerException in my interceptor class, but I could find the reason why.

    The error log entry:

    2005-04-19 14:52:06 StandardWrapperValve[control]: Servlet.service() for servlet control threw exception
    java.lang.NullPointerException
        at interceptors.ctoDelete2HistBackInterceptor.preDelete(ctoDelete2HistBackInterceptor.java:32)
        at org.dbforms.event.DbEventInterceptorSupport.preDelete(DbEventInterceptorSupport.java:188)
        at org.dbforms.config.Table.processInterceptors(Table.java:1991)
        at org.dbforms.event.datalist.DeleteEvent.processEvent(DeleteEvent.java:134)
        at org.dbforms.servlets.Controller.process(Controller.java:309)
        at org.dbforms.servlets.Controller.doPost(Controller.java:107)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
        at org.dbforms.util.external.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:190)
        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:540)
        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:117)
        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)

    The interceptor class:

    package interceptors;

    import org.dbforms.config.DbFormsConfig;
    import org.dbforms.config.FieldValue;
    import org.dbforms.config.FieldValues;
    import org.dbforms.config.Table;
    import org.dbforms.config.ValidationException;

    import org.dbforms.event.DbEventInterceptorSupport;

    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;

    import javax.servlet.http.HttpServletRequest;

    public class ctoDelete2HistBackInterceptor extends DbEventInterceptorSupport
    {
        public int preDelete(HttpServletRequest request,
                Table              table,
                FieldValues        fieldValues,
                DbFormsConfig      config,
                Connection         con) throws ValidationException
        {
            if (fieldValues != null)
            {
                String strDocID = "";
                String strHistID = "";
                int Row = 0;

                //Here I get my java.lang.NullPointerException:
                strHistID = (String) fieldValues.get("id").getFieldValue();
                strDocID = (String) fieldValues.get("doc_id").getFieldValue();
               
                //Debug:
                //strDocID = "537";
                //strHistID = "1";
                if ((strDocID != null) && (strHistID != ""))
                {
                    String backupDocQuery =
                        "INSERT INTO cto_doc_versions (cto_doc_versions.name, cto_doc_versions.doc_id, " +
                        "cto_doc_versions.xdt_file, cto_doc_versions.xdt_file_name, cto_doc_versions.tsl_file, " +
                        "cto_doc_versions.tsl_file_name, cto_doc_versions.last_edit_by, cto_doc_versions.last_edit_time) " +
                        "SELECT cto_docs.name, cto_docs.id, cto_docs.xdt_file, cto_docs.xdt_file_name, cto_docs.tsl_file, " +
                        "cto_docs.tsl_file_name, cto_docs.last_edit_by, cto_docs.last_edit_time " +
                        "FROM cto_docs WHERE cto_docs.id = " + strDocID + ";";
                   
                    String activateDocQuery =
                        "UPDATE cto_docs, cto_doc_versions SET " +
                        "cto_docs.name = cto_doc_versions.name, cto_docs.xdt_file = cto_doc_versions.xdt_file, " +
                        "cto_docs.xdt_file_name = cto_doc_versions.xdt_file_name, cto_docs.tsl_file = cto_doc_versions.tsl_file, " +
                        "cto_docs.tsl_file_name = cto_doc_versions.tsl_file_name, cto_docs.last_edit_by = cto_doc_versions.last_edit_by, " +
                        "cto_docs.last_edit_time = cto_doc_versions.last_edit_time " +
                        "WHERE cto_doc_versions.id = " + strHistID + " AND cto_doc_versions.doc_id = cto_docs.id;";
                    try
                    {
                        Statement stmt = con.createStatement();
                        Row = stmt.executeUpdate(backupDocQuery);
                        Row = stmt.executeUpdate(activateDocQuery);               
                        stmt.close();
                    }
                    catch (SQLException e)
                    {
                        System.out.println("Datenbankfehler: "    + e.getMessage());
                        return IGNORE_OPERATION;
                    }
                }
            }
            return GRANT_OPERATION;
        }
    }

    My table definition:

        <table name="cto_doc_versions" defaultVisibleFields="id">
            <field name="id" fieldType="int" size="11" isKey="true" autoInc="true" />
            <field name="name" fieldType="varchar" size="50" />
            <field name="doc_id" fieldType="int" size="11" isKey="true" />
            <field name="xdt_file" fieldType="blob" size="16277215" />
            <field name="xdt_file_name" fieldType="varchar" size="255" />
            <field name="tsl_file" fieldType="blob" size="16277215" />
            <field name="tsl_file_name" fieldType="varchar" size="255" />
            <field name="last_edit_by" fieldType="int" size="11" />
            <field name="last_edit_time" fieldType="timestamp" size="14" />

            <!-- add "granted-privileges" element for security constraints -->
            <interceptor className = "interceptors.ctoDelete2HistBackInterceptor"/>
        </table>

    Could anybody give me a hint, where the problem is?

    Thanks in advance + regards

    Theo

     
    • Henner Kollmann

      Henner Kollmann - 2005-04-19

      What's about debugging?
      Which is line 32 in your interceptor?

      Henner

       
      • MisterT

        MisterT - 2005-04-19

        It's this place in the code:

                    strHistID = (String) fieldValues.get("id").getFieldValue();
                    strDocID = (String) fieldValues.get("doc_id").getFieldValue();

        If I comment out this two lines to try some fixed String values instead, everythings working fine.

        Any idea with this?

        regards Theo

         
        • Henner Kollmann

          Henner Kollmann - 2005-04-20

          Yes, seems that ) fieldValues.get("id") returns null. Means that this values are not in the fieldValues list  - why ever.

          Henner

           
          • MisterT

            MisterT - 2005-04-20

            Could you imagine why this could happen? I just checked my table definition in the dbforms-config.xml again and again, but all seems to be OK...

            Are there other points to take care of? There must be a reason why the field names didn't work in the 'cto_doc_versions' table. If I use the interceptor in another table, where the same field names also exist, the interceptor works without a exception.

            regards Theo

             
            • Henner Kollmann

              Henner Kollmann - 2005-04-20

              Are the fields defined in the jsp?

               
              • MisterT

                MisterT - 2005-04-21

                Not really. It's a standard form with a subform in it. The interceptor works for the embedded table form.

                I will take a closer look to JSP.

                regards Theo

                 

Log in to post a comment.

MongoDB Logo MongoDB