You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by "Richard Mixon (qwest)" <rn...@qwest.net> on 2004/07/10 21:31:21 UTC

NPE in ActionForm where it is not be possible

I am getting a NullPointerException in an action form that should
theoretically not be possible :(
Any ideas/help/suggestions are appreciated. Obviously it "is possible"
:).

I happens when I'm testing. I find a problem, leave my browser up, then
stop/start Tomcat. I select a "home page" link from the page that is
still displayed - its simply an action wrapped simple JSP page with no
dynamic data that serves as  a central bulletin board for my users.
After that is displayed, I go back to the page that I am developing on.
Boom! I get the NPE in the middle of a getter method on the action form.

Here is the method - the NPE is flagged at the line "if
(log.isDebugEnabled()) {".
    ...
    public String getMeasParmsId() {
        if (log.isDebugEnabled()) {
            log.debug("getMeasParmsId()=" + measParmsId);
        }
        return measParmsId;
    }
    ...

The "log" variable is initialized when the Action form is instantiated,
like so:
  public class ChartWizardForm extends ActionForm implements
java.io.Serializable {
      private transient Log log =
LogFactory.getLog(ChartWizardForm.class);
      ...

Obviously I'm missing something pretty basic. Is Tomcat re-using a form
instance across restarts? I've got pretty much default settings in
Tomcat:


Here is the exception stack trace:
2004-07-10 12:21:00 StandardWrapperValve[action]: Servlet.service() for
servlet action threw exception
java.lang.NullPointerException
        at
com.ltoj.webapp.form.ChartWizardForm.getMeasParmsId(ChartWizardForm.java
:137)
        at
com.ltoj.webapp.action.AdminChartWizardAction.stepMeasParms(AdminChartWi
zardAction.java:88)
        at
com.ltoj.webapp.action.AdminChartWizardAction.unspecified(AdminChartWiza
rdAction.java:66)
        at
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.j
ava:260)
        at
com.ltoj.webapp.action.BaseAction.execute(BaseAction.java:162)
        at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestPr
ocessor.java:484)
        at
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:
274)
        at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
        at
org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:284)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:204)
        at
com.atlassian.util.profiling.filters.ProfilingFilter.doFilter(ProfilingF
ilter.java:132)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:233)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:204)
        at
com.ltoj.webapp.filter.BreadCrumbFilter.doFilter(BreadCrumbFilter.java:9
4)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:233)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:204)
        at
com.ltoj.webapp.filter.ActionFilter.doFilter(ActionFilter.java:372)
        at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applica
tionFilterChain.java:233)
        at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilt
erChain.java:204)
        at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValv
e.java:257)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
67)
        at
org.apache.catalina.core.StandardContextValve.invokeInternal(StandardCon
textValve.java:245)
        at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValv
e.java:199)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
        at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(Authenticator
Base.java:587)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:149)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
67)
        at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java
:184)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
        at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java
:164)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:149)
        at
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:578
)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:149)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
67)
        at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
java:156)
        at
org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveCo
ntext.java:151)
        at
org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:5
67)
        at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
        at
org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:206)
        at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:83
3)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processC
onnection(Http11Protocol.java:732)
        at
org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:61
9)
        at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool
.java:688)
        at java.lang.Thread.run(Thread.java:536)


Thanks - Richard


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


RE: NPE in ActionForm where it is not be possible

Posted by "Richard Mixon (qwest)" <rn...@qwest.net>.
QM <ma...@brandxdev.net> wrote:
> On Sat, Jul 10, 2004 at 12:31:21PM -0700, Richard Mixon (qwest) wrote:
>> The "log" variable is initialized when the Action form is
>>   instantiated, like so: public class ChartWizardForm extends
>>       ActionForm implements java.io.Serializable { private transient
>> Log log =
>> LogFactory.getLog(ChartWizardForm.class);
>>       ...
>>
>> Obviously I'm missing something pretty basic. Is Tomcat re-using a
>> form instance across restarts? I've got pretty much default settings
>> in Tomcat:
>
> I notice, you define/initialize the instance variable "log" at its
> declaration point.
>
> Humor me: what happens if you initialize "log" in the ctor?
>
> -QM

I've had to look at higher priorities for a couple of days :)

Thanks for the idea. I changed as follows:
    ...
    // private transient Log log =
LogFactory.getLog(ChartWizardForm.class);
    private transient Log log; // Logging instance for this class
    ...

    public ChartWizardForm() {
        showInactive = false;
        altClassMeasOrder = false;
        ...
        outputFmt="";
        scaleFactor="";
        log = LogFactory.getLog(ChartWizardForm.class); // <-- ADDED
INITIALIZATION HERE
    }
    ...

But, still get the NPE :(

I'm defininig the instance variable as transient because Tomcat
complains about saving sessions that contain a private instance variable
(non-transient) of type Log. I was trying to get my sessions to persist
across restarts. Does that suggest anything?

Thank you again - Richard


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org


Re: NPE in ActionForm where it is not be possible

Posted by QM <qm...@brandxdev.net>.
On Sat, Jul 10, 2004 at 12:31:21PM -0700, Richard Mixon (qwest) wrote:
: The "log" variable is initialized when the Action form is instantiated,
: like so:
:   public class ChartWizardForm extends ActionForm implements
: java.io.Serializable {
:       private transient Log log =
: LogFactory.getLog(ChartWizardForm.class);
:       ...
: 
: Obviously I'm missing something pretty basic. Is Tomcat re-using a form
: instance across restarts? I've got pretty much default settings in
: Tomcat:

I notice, you define/initialize the instance variable "log" at its
declaration point.

Humor me: what happens if you initialize "log" in the ctor?

-QM


-- 

software  -- http://www.brandxdev.net
tech news -- http://www.RoarNetworX.com


---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org