You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by lu...@apache.org on 2002/11/01 03:09:15 UTC

cvs commit: jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler Generator.java

luehe       2002/10/31 18:09:15

  Modified:    jasper2/src/share/org/apache/jasper/compiler Generator.java
  Log:
  - All variable synchronization and restoration that
    occurs at the end of a tag file must occur regardless of whether
    an exception is thrown inside the tag file.
  
  - All variable synchronization that occurs after the invocation
    of a fragment must occur regardless of whether an exception
    occured while invoking the fragment.
  
  Revision  Changes    Path
  1.115     +30 -17    jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java
  
  Index: Generator.java
  ===================================================================
  RCS file: /home/cvs/jakarta-tomcat-jasper/jasper2/src/share/org/apache/jasper/compiler/Generator.java,v
  retrieving revision 1.114
  retrieving revision 1.115
  diff -u -r1.114 -r1.115
  --- Generator.java	31 Oct 2002 02:11:40 -0000	1.114
  +++ Generator.java	1 Nov 2002 02:09:15 -0000	1.115
  @@ -1831,17 +1831,22 @@
   	    String varAttr = n.getTextAttribute("var");
   	    if (varReaderAttr != null || varAttr != null) {
   		out.printil("_jspx_sout = new java.io.StringWriter();");
  -		out.printin(toGetterMethod(n.getTextAttribute("fragment")));
  -		out.println(".invoke(_jspx_sout);");
   	    } else {
  -		out.printin(toGetterMethod(n.getTextAttribute("fragment")));
  -		out.println(".invoke(null);");
  +		out.printil("_jspx_sout = null;");
   	    }
  -
  +	    out.printil("try {");
  +	    out.pushIndent();
  +	    out.printin(toGetterMethod(n.getTextAttribute("fragment")));
  +	    out.println(".invoke(_jspx_sout);");
  +	    out.popIndent();
  +	    out.printil( "} finally {" );
  +	    out.pushIndent();
   	    // Copy page scope of invoking page back to virtual page scope of
   	    // tag file
   	    out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).copyPageToTagScope(javax.servlet.jsp.tagext.VariableInfo.NESTED);");
   	    out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).copyPageToTagScope(javax.servlet.jsp.tagext.VariableInfo.AT_BEGIN);");
  +	    out.popIndent();
  +	    out.printil("}");
   
   	    // Store varReader in appropriate scope
   	    if (varReaderAttr != null || varAttr != null) {
  @@ -1874,15 +1879,21 @@
   	    String varAttr = n.getTextAttribute("var");
   	    if (varReaderAttr != null || varAttr != null) {
   		out.printil("_jspx_sout = new java.io.StringWriter();");
  -		out.printil("getJspBody().invoke(_jspx_sout);");
   	    } else {
  -		out.printil("getJspBody().invoke(null);");
  +		out.printil("_jspx_sout = null;");
   	    }
  -
  +	    out.printil("try {");
  +	    out.pushIndent();
  +	    out.printil("getJspBody().invoke(_jspx_sout);");
  +	    out.popIndent();
  +	    out.printil( "} finally {" );
  +	    out.pushIndent();
   	    // Copy page scope of invoking page back to virtual page scope of
   	    // tag file
   	    out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).copyPageToTagScope(javax.servlet.jsp.tagext.VariableInfo.NESTED);");
   	    out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).copyPageToTagScope(javax.servlet.jsp.tagext.VariableInfo.AT_BEGIN);");
  +	    out.popIndent();
  +	    out.printil("}");
   
   	    // Store varReader in appropriate scope
   	    if (varReaderAttr != null || varAttr != null) {
  @@ -2941,11 +2952,7 @@
   	out.pushIndent();
       }
   
  -    private void generateTagHandlerPostamble( TagInfo tagInfo ) {
  -	out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).copyTagToPageScope(javax.servlet.jsp.tagext.VariableInfo.AT_BEGIN);");
  -	out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).copyTagToPageScope(javax.servlet.jsp.tagext.VariableInfo.AT_END);");
  -	out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).restoreNestedVariables();");
  -        
  +    private void generateTagHandlerPostamble( TagInfo tagInfo ) {        
           out.popIndent();
           
           // Have to catch Throwable because a classic tag handler
  @@ -2960,8 +2967,14 @@
           out.printil( "    throw (javax.servlet.jsp.JspException) t;" );
           out.printil("throw new javax.servlet.jsp.JspException(t);" );
           out.popIndent();
  +        out.printil( "} finally {" );
  +        out.pushIndent();
  +	out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).copyTagToPageScope(javax.servlet.jsp.tagext.VariableInfo.AT_BEGIN);");
  +	out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).copyTagToPageScope(javax.servlet.jsp.tagext.VariableInfo.AT_END);");
  +	out.printil("((org.apache.jasper.runtime.JspContextWrapper) jspContext).restoreNestedVariables();");
  +        out.popIndent();
           out.printil( "}" );
  -        
  +
           // Close the doTag method
           out.popIndent();
           out.printil("}");
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>