ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Craig Johannsen <cjo...@shaw.ca>
Subject IterateTag NullPointerException
Date Tue, 08 Mar 2005 08:51:37 GMT
Does anyone have experience with the following type of bug?  It may not 
precisely be an iBATIS problem, but it occurred in a code pattern I 
borrowed from JPetstore, which has the same problem in its 
SearchProducts page.  A null pointer exception occurs in the doStartTag 
function of the Struts IterateTag when the user clicks the Next or Prev 
button (actually an image) after the user has been idle for some longish 
period of time (say 30 minutes?).  At this point, the IterateTag's 
doStartTag function is about to do something with a PaginatedArrayList 
instance.  However, I'm guessing it may be a page context variable that 
has gone null, rather than some problem with the PaginatedArrayList 
instance.

Previously, I had thought that it was the session expiring that was 
causing the problem, but several attempts to trap a null session using 
request.getSession(false), including writing an ExpiredSessionFilter to 
catch that situation and redirect to a warning page have failed to ever 
detect a null return value from request.getSession(false).

Also, even earlier, I had thought it was the PaginatedArrayList that had 
the problem and included some code to test for empty and for null use, 
such as in the following excerpt:
<bean:define id="category" name="catalogBean" property="category" />
<bean:define id="productList" name="catalogBean" property="productList" />
...
<logic:notEmpty name="productList">
<logic:present name="productList">
...
<logic:iterate id="product" name="productList" >
...
   <bean:write name="product" property="productName" />
...
   <bean:write filter="false" name="product" property="productDescr"/>
...
</logic:iterate>
...
</logic:present>
</logic:notEmpty>

However, the above code did not help prevent the NullPointerException.  
Any suggestions?

The struts-config.xml action is similar to that of JPetstore:
    <action path="/cat/scrollProdListForCat" 
type="com.ibatis.struts.BeanAction"
      name="catalogBean" scope="session"
      validate="false" >
      <forward name="success" 
path="/WEB-INF/pages/catalog/ProdListForCategory.jsp" />
    </action>

Likewise, the action code is similar to JPetstore:
    public Object scrollProdListForCat() {
        if ("next".equals(pageDirection) && productList != null) {
            productList.nextPage();
        } else if ("previous".equals(pageDirection) && productList != 
null) {
            productList.previousPage();
        }
        return "success";
    }

My development environment is Win XP, Eclipse 3.0.1, Sun JDK 1.5.0_01, 
Struts 1.1., iBATIS SqlMaps 2.0.8, iBATIS DAO 2.0.8, JBoss 4.0.  The 
JPetstore version is 4.0.5.   I observed the same problem running the 
same environment on Linux rather than XP, so the problem almost 
certainly has nothing to do with the OS.
------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented 
it from fulfilling this request.

exception

org.apache.jasper.JasperException
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:372)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	net.sf.wfnm.web.NoMultipleSubmitFilter.doFilter(NoMultipleSubmitFilter.java:73)
	net.sf.wfnm.web.SessionBindingFilter.doFilter(SessionBindingFilter.java:49)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)

root cause

java.lang.NullPointerException
	org.apache.struts.taglib.logic.IterateTag.doStartTag(IterateTag.java:362)
	org.apache.jsp.WEB_002dINF.pages.catalog.ProdListForCategory_jsp._jspService(ProdListForCategory_jsp.java:184)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
	org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
	org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
	org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
	org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:507)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:697)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
	net.sf.wfnm.web.NoMultipleSubmitFilter.doFilter(NoMultipleSubmitFilter.java:73)
	net.sf.wfnm.web.SessionBindingFilter.doFilter(SessionBindingFilter.java:49)
	org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:75)



Mime
View raw message