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

http://issues.apache.org/bugzilla/show_bug.cgi?id=35156

           Summary: Stream closed exception
           Product: Tomcat 5
           Version: 5.0.12
          Platform: PC
        OS/Version: Windows XP
            Status: NEW
          Keywords: ErrorMessage
          Severity: normal
          Priority: P2
         Component: Jasper
        AssignedTo: tomcat-dev@jakarta.apache.org
        ReportedBy: [EMAIL PROTECTED]


Sorry for my bad English.

Sources:
1. $Header: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/
runtime/PageContextImpl.java,v 1.52 2003/09/02 21:39:59 remm Exp $
   $Revision: 1.52 $
   $Date: 2003/09/02 21:39:59 $
2. $Header: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/
catalina/core/ApplicationDispatcher.java,v 1.26 2003/09/12 17:04:12 remm Exp $
   $Revision: 1.26 $
   $Date: 2003/09/12 17:04:12 $


Steps To Reproduce:
1. Create four JSP:
---------------------------------------------------------
------------------------- 1.jsp -------------------------
<%@ page import="java.util.Vector"%>
<%@ page errorPage="error.jsp" %>
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %>

CONTENT PAGE 1

<%
  // SOME COLLECTION
  Vector someCollection1 = new Vector(1);
  someCollection1.add("some value");
%>

<%-- Some EVAL_BODY_BUFFERED tag --%>
<logic:iterate id="some_id_1" collection="<%= someCollection1 %>" >
  <jsp:include page="2.jsp" />
</logic:iterate>

CONTENT PAGE 1

---------------------------------------------------------
------------------------- 2.jsp -------------------------
<%@ page import="java.util.Vector"%>
<%@ page errorPage="error.jsp" %>
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %>

CONTENT PAGE 2
<%
  Vector someCollection2 = new Vector(1);
  someCollection2.add("some value");
%>

<%-- Some EVAL_BODY_BUFFERED tag --%>
<logic:iterate id="some_id_2" collection="<%= someCollection2 %>" ><%
  // Some throwable statment
  if(request.getParameter("not exist parameter") == null)
    throw new Exception();
%></logic:iterate>

CONTENT PAGE 2

---------------------------------------------------------
------------------------- 3.jsp -------------------------
<%@ page import="java.util.Vector"%>
<%@ taglib prefix="logic" uri="/WEB-INF/tlds/struts-logic.tld" %>

<%
  Vector someCollection3 = new Vector(1);
  someCollection3.add("some value");
%>

<%-- Some EVAL_BODY_BUFFERED tag --%>
<logic:iterate id="some_id_3" collection="<%= someCollection3 %>" >
  CONTENT PAGE 3
</logic:iterate>

---------------------------------------------------------
----------------------- error.jsp -----------------------
<%@ page import="java.io.PrintWriter"%>
<%@ page isErrorPage="true" %>

<pre>
<%
  PrintWriter pw;
  pw = new PrintWriter(out);
  Exception exc;
  exc = pageContext.getException();
  if(exc != null)
    exc.printStackTrace(pw);
%>
</pre>
---------------------------------------------------------

2. Deploy application.
3. Open 1.jsp. We receive a IOException instead of Exception from 2.jsp.
3. Open 3.jsp. We receive a IOException though should not receive exception.

WHY:
When thrown wxceptoin on 2.jsp into ApplicationDispatcher in 465 line was 
closes 
writer. Stack trace:
org.apache.jasper.catalina.core.ApplicationDispatcher.doForward():465
org.apache.jasper.catalina.core.ApplicationDispatcher.forward():359
org.apache.jasper.runtime.PageContextImpl.forward():543
org.apache.jasper.runtime.PageContextImpl.handlePageException():633
org.apache.jsp._2_jsp._jspService(): if (pageContext != null) pageContext.
handlePageException(t);

Later at use EVAL_BODY_BUFFERED tags called method pushBody, which returns 
closed writer. This is reason of IOExceptions.
Closed writer - is outs[depth] from PageContextImpl.
Possible, condition into PageContextImpl.pushBody in line 557 must be:
if (depth >= outs.length || IS_CLOSED(outs[depth])),
instead of
if (depth >= outs.length).

-- 
Configure bugmail: http://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to