You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by bu...@apache.org on 2003/08/15 18:40:10 UTC

DO NOT REPLY [Bug 22466] New: - StackOverflowError in ResponseBase.write (no recursion)

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22466>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=22466

StackOverflowError in ResponseBase.write (no recursion)

           Summary: StackOverflowError in ResponseBase.write (no recursion)
           Product: Tomcat 4
           Version: 4.0.2 Final
          Platform: Other
        OS/Version: Other
            Status: NEW
          Severity: Blocker
          Priority: Other
         Component: Catalina
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: mcepek@smsi.com


We have a JSP page that brings down JBoss with a StackOverflowError
exception when it iterates too many (2419) times.

We are using JBoss 2.4.4 and Struts 1.0.2 on SCO 5.0.6 with
Caldera-UNIX-J2SE-1.3.0_02 (green threads, sunwjit).

I am including the stack trace and JSP code below.  There is no
recursion, the stack has only 60 frames.  Also, our javac has no
-Xss (stack size) option.

When it crashes, the browser (not surprisingly) receives incomplete
HTML (approx 3 Mb).

One bit of explanation about the JSP:  we used a file called
GUIStyle.properties to contain common HTML snippets.  (And yes,
we are currently converting to CSS :-)

I would greatly appreciate any fix or workaround suggestions, pointers
to known bugs causing this, or recommendations for further debugging.

Thanks in advance.

P.S.  I just confirmed that JBoss running on Win2k does NOT exhibit this
problem.  However, since virtually all of the code in the stack trace is
JBoss', I don't think this can be easily dismissed as an OS or JVM problem.
I am working to reduce the JSP to something smaller and repeatable.

  -----------------------  Stack Trace:  -----------------------

2003-08-13 11:32:51,361 HttpProcessor[8080][4]/ERROR: ApplicationDispatcher
[/webconfig] Servlet.service() for servlet jsp threw exception
javax.servlet.ServletException
   at org.apache.jasper.runtime.PageContextImpl.handlePageException
(PageContextImpl.java:457)
   at org.apache.jsp.agentList$jsp._jspService(agentList$jsp.java, Compiled 
Code)
   at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service
(JspServlet.java, Compiled Code)
   at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
   at org.apache.jasper.servlet.JspServlet.service(JspServlet.java, Compiled 
Code)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at org.apache.catalina.core.ApplicationDispatcher.invoke
(ApplicationDispatcher.java, Compiled Code)
   at org.apache.catalina.core.ApplicationDispatcher.doForward
(ApplicationDispatcher.java, Compiled Code)
   at org.apache.catalina.core.ApplicationDispatcher.forward
(ApplicationDispatcher.java:355)
   at org.apache.struts.action.RequestProcessor.doForward
(RequestProcessor.java:961)
   at org.apache.struts.action.RequestProcessor.processActionForward
(RequestProcessor.java:400)
   at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java, 
Compiled Code)
   at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1227)
   at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:484)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java, Compiled Code)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java, Compiled Code)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java, Compiled Code)
   at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java, 
Compiled Code)
   at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.valves.CertificatesValve.invoke
(CertificatesValve.java:246)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java, 
Compiled Code)
   at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
   at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:164)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:170)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java, 
Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java, 
Compiled Code)
   at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:163)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java, 
Compiled Code)
   at org.apache.catalina.connector.http.HttpProcessor.process
(HttpProcessor.java, Compiled Code)
   at org.apache.catalina.connector.http.HttpProcessor.run
(HttpProcessor.java:1106)
   at java.lang.Thread.run(Thread.java:484)
2003-08-13 11:32:51,436 HttpProcessor[8080][4]/ERROR: ----- Root Cause -----
java.lang.StackOverflowError
   at org.apache.catalina.connector.ResponseBase.write(ResponseBase.java, 
Compiled Code)
   at org.apache.catalina.connector.ResponseStream.write(ResponseStream.java, 
Compiled Code)
   at org.apache.catalina.connector.http.HttpResponseStream.write
(HttpResponseStream.java, Compiled Code)
   at javax.servlet.ServletOutputStream.print(ServletOutputStream.java, 
Compiled Code)
   at javax.servlet.ServletOutputStream.println(ServletOutputStream.java, 
Compiled Code)
   at org.apache.catalina.connector.http.HttpResponseStream.write
(HttpResponseStream.java, Compiled Code)
   at java.io.OutputStreamWriter.write(OutputStreamWriter.java, Compiled Code)
   at java.io.PrintWriter.write(PrintWriter.java, Compiled Code)
   at org.apache.catalina.connector.ResponseWriter.write(ResponseWriter.java, 
Compiled Code)
   at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java, 
Compiled Code)
   at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java, 
Compiled Code)
   at org.apache.jasper.runtime.JspWriterImpl.write(JspWriterImpl.java, 
Compiled Code)
   at org.apache.jasper.runtime.JspWriterImpl.print(JspWriterImpl.java, 
Compiled Code)
   at org.apache.struts.util.ResponseUtils.writePrevious(ResponseUtils.java, 
Compiled Code)
   at org.apache.struts.taglib.logic.IterateTag.doAfterBody(IterateTag.java, 
Compiled Code)
   at org.apache.jsp.agentList$jsp._jspService(agentList$jsp.java, Compiled 
Code)
   at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service
(JspServlet.java, Compiled Code)
   at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
   at org.apache.jasper.servlet.JspServlet.service(JspServlet.java, Compiled 
Code)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at org.apache.catalina.core.ApplicationDispatcher.invoke
(ApplicationDispatcher.java, Compiled Code)
   at org.apache.catalina.core.ApplicationDispatcher.doForward
(ApplicationDispatcher.java, Compiled Code)
   at org.apache.catalina.core.ApplicationDispatcher.forward
(ApplicationDispatcher.java:355)
   at org.apache.struts.action.RequestProcessor.doForward
(RequestProcessor.java:961)
   at org.apache.struts.action.RequestProcessor.processActionForward
(RequestProcessor.java:400)
   at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java, 
Compiled Code)
   at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1227)
   at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:484)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java, Compiled Code)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter
(ApplicationFilterChain.java, Compiled Code)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter
(ApplicationFilterChain.java, Compiled Code)
   at org.apache.catalina.core.StandardWrapperValve.invoke
(StandardWrapperValve.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java, 
Compiled Code)
   at org.apache.catalina.core.StandardContextValve.invoke
(StandardContextValve.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.valves.CertificatesValve.invoke
(CertificatesValve.java:246)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java, 
Compiled Code)
   at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
   at org.apache.catalina.core.StandardHostValve.invoke
(StandardHostValve.java:164)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.valves.ErrorDispatcherValve.invoke
(ErrorDispatcherValve.java:170)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java, 
Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java, 
Compiled Code)
   at org.apache.catalina.core.StandardEngineValve.invoke
(StandardEngineValve.java:163)
   at org.apache.catalina.core.StandardPipeline.invokeNext
(StandardPipeline.java, Compiled Code)
   at org.apache.catalina.core.StandardPipeline.invoke
(StandardPipeline.java:472)
   at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java, 
Compiled Code)
   at org.apache.catalina.connector.http.HttpProcessor.process
(HttpProcessor.java, Compiled Code)
   at org.apache.catalina.connector.http.HttpProcessor.run
(HttpProcessor.java:1106)
   at java.lang.Thread.run(Thread.java:484)

----------------------  agentList.jsp:  ----------------------

<%@page contentType="text/html" 
import="com.smsi.config.action.*,org.apache.commons.beanutils.*" 
language="java"%>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<%@ taglib uri="/WEB-INF/config.tld" prefix="config" %>

<jsp:useBean id="agentList_Items" scope="request" class="java.util.ArrayList"/>
<jsp:useBean id="agentListForm" scope="request" 
class="org.apache.struts.validator.DynaValidatorForm"/>

<config:checkLogon/>

<html:html locale="true">
<head>
  <html:base/>
  <%@ include file="javascript/messageBox.js" %>
</head>

<body <bean:message bundle="GUIStyle" key="body_bkg"/> >

<html:errors />

<bean:message bundle="GUIStyle" key="table_outer_start"/>
<tr>
  <bean:message bundle="GUIStyle" key="td_outer_header_start" arg0="2"/>
  <bean:message key="agentListForm.subtitle"/>
  <bean:message bundle="GUIStyle" key="td_outer_header_end"/>
</tr>
<tr>
  <td align="center" valign="top">
  <bean:message bundle="GUIStyle" key="table_column_start"/>
  <tr>
    <bean:message bundle="GUIStyle" key="td_inner_header_start" arg0="1"/>
    <a href="agentList.do?action=sort&field=switch_name">
      <bean:message key="agentListForm.switchName.header"/>
    </a>
    <bean:message bundle="GUIStyle" key="td_inner_header_end"/>

    <bean:message bundle="GUIStyle" key="td_inner_header_start" arg0="1"/>
    <a href="agentList.do?action=sort&field=agent_id">
      <bean:message key="agentListForm.agentId.header"/>
    </a>
    <bean:message bundle="GUIStyle" key="td_inner_header_end"/>

    <bean:message bundle="GUIStyle" key="td_inner_header_start" arg0="1"/>
    <a href="agentList.do?action=sort&field=sw_agent_sname">
      <bean:message key="agentListForm.shortName.header"/>
    </a>
    <bean:message bundle="GUIStyle" key="td_inner_header_end"/>

    <bean:message bundle="GUIStyle" key="td_inner_header_start" arg0="5"/>
    <bean:message key="actions.header"/>
    <bean:message bundle="GUIStyle" key="td_inner_header_end"/>
  </tr>
  <tr>
  <td>
  <logic:iterate id="agent" name="agentList_Items"
      type="com.smsi.config.model.MutableAgentModel">
    <tr>
    <bean:message bundle="GUIStyle" key="td_column_data_start"/>
    <bean:write name="agent" property="switch_name"/>
    <bean:message bundle="GUIStyle" key="td_column_data_end"/>

    <bean:message bundle="GUIStyle" key="td_column_data_start"/>
    <bean:write name="agent" property="agent_id"/>
    <bean:message bundle="GUIStyle" key="td_column_data_end"/>

    <bean:message bundle="GUIStyle" key="td_column_data_start"/>
    <bean:write name="agent" property="sw_agent_sname"/>
    <bean:message bundle="GUIStyle" key="td_column_data_end"/>

    <bean:message bundle="GUIStyle" key="td_column_data_start"/>
    <a id="<bean:write name="agent" property="sw_agent_sname"/>-edit" 
href="agentList.do?action=edit&agentDetail_agentID=<bean:write name="agent" 
property="agent_id"/>&agentDetail_switchID=<bean:write name="agent" 
property="switch_id"/>&agentDetail_personID=<bean:write name="agent" 
property="person_id"/>">
        <bean:message key="edit.action"/>
    </a>
    <bean:message bundle="GUIStyle" key="td_column_data_end"/>

    <bean:message bundle="GUIStyle" key="td_column_data_start"/>
    <a id="<bean:write name="agent" property="sw_agent_sname"/>-copy" 
href="agentList.do?action=copy&agentDetail_agentID=<bean:write name="agent" 
property="agent_id"/>&agentDetail_switchID=<bean:write name="agent" 
property="switch_id"/>&agentDetail_personID=<bean:write name="agent" 
property="person_id"/>">
        <bean:message key="copy.action"/>
    </a>
    <bean:message bundle="GUIStyle" key="td_column_data_end"/>

    <bean:message bundle="GUIStyle" key="td_column_data_start"/>
    <a id="<bean:write name="agent" property="sw_agent_sname"/>-del" 
href="agentList.do?action=delete&agentList_agentID=<bean:write name="agent" 
property="agent_id"/>&agentList_switchID=<bean:write name="agent" 
property="switch_id"/>&agentList_personID=<bean:write name="agent" 
property="person_id"/>" name="<bean:write name="agent" 
property="sw_agent_sname"/>"
        onmousedown='return popConfirmForAnchor( this.href, "<bean:message 
key="agentListForm.confirmDelete"/>" + this.name + "?" );'>
      <bean:message key="delete.action"/>
    </a>
    <!-- TODO: i18n the above line -->
    <bean:message bundle="GUIStyle" key="td_column_data_end"/>

    <bean:message bundle="GUIStyle" key="td_column_data_start"/>
      <logic:notEqual name="agent" property="agentHide" value='N'>
        <a id="<bean:write name="agent" property="sw_agent_sname"/>-hide" 
href="agentList.do?
action=hide&agentList_agentHide=N&agentList_agentID=<bean:write name="agent" 
property="agent_id"/>&agentList_switchID=<bean:write name="agent" 
property="switch_id"/>&agentList_personID=<bean:write name="agent" 
property="person_id"/>">
          <bean:message key="agentListForm.show.action"/>
        </a>
      </logic:notEqual>  
      <logic:equal name="agent" property="agentHide" value='N'>
        <a id="<bean:write name="agent" property="sw_agent_sname"/>-hide" 
href="agentList.do?
action=hide&agentList_agentHide=Y&agentList_agentID=<bean:write name="agent" 
property="agent_id"/>&agentList_switchID=<bean:write name="agent" 
property="switch_id"/>&agentList_personID=<bean:write name="agent" 
property="person_id"/>">
            <bean:message key="agentListForm.hide.action"/>
        </a>
      </logic:equal>  
    <bean:message bundle="GUIStyle" key="td_column_data_end"/>

    <bean:message bundle="GUIStyle" key="td_column_data_start"/>
        <a id="<bean:write name="agent" property="sw_agent_sname"/>-group" 
href="agentList.do?action=group&agentID=<bean:write name="agent" 
property="agent_id"/>&switchID=<bean:write name="agent" 
property="switch_id"/>&personID=<bean:write name="agent" 
property="person_id"/>&swAgentName=<bean:write name="agent" 
property="sw_agent_sname"/>">
            <bean:message key="agentListForm.group.action"/>
        </a>
    <bean:message bundle="GUIStyle" key="td_column_data_end"/>
    </tr>
  </logic:iterate>
  <bean:message bundle="GUIStyle" key="table_column_end"/>
</td>
</tr>
<bean:message bundle="GUIStyle" key="table_outer_end"/>

<bean:message bundle="GUIStyle" key="table_button_start"/>
<html:form method="post" action="/agentList">
<tr>
  <td align="center">
  <html:submit property="agentList_newButton">
    <bean:message key="agentListForm.newButton"/>
  </html:submit>
  </td>
  <td align="center">
      <html:submit property="agentList_hideButton">
            <bean:message key="agentListForm.hideButton"/>
      </html:submit>
  </td>
</tr>
<bean:message bundle="GUIStyle" key="table_button_end"/>

</html:form>
</body>
</html:html>

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