You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2015/01/16 08:37:26 UTC

svn commit: r1652353 - in /sling/trunk/bundles/scripting: core/src/main/java/org/apache/sling/scripting/core/servlet/ jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/

Author: olli
Date: Fri Jan 16 07:37:25 2015
New Revision: 1652353

URL: http://svn.apache.org/r1652353
Log:
SLING-4298 use internal StringWriter instead of BufferedServletOutputStream

Removed:
    sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/BufferedServletOutputStream.java
Modified:
    sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/CaptureResponseWrapper.java
    sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java

Modified: sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/CaptureResponseWrapper.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/CaptureResponseWrapper.java?rev=1652353&r1=1652352&r2=1652353&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/CaptureResponseWrapper.java (original)
+++ sling/trunk/bundles/scripting/core/src/main/java/org/apache/sling/scripting/core/servlet/CaptureResponseWrapper.java Fri Jan 16 07:37:25 2015
@@ -17,8 +17,8 @@
 package org.apache.sling.scripting.core.servlet;
 
 import java.io.IOException;
-import java.io.OutputStreamWriter;
 import java.io.PrintWriter;
+import java.io.StringWriter;
 
 import javax.servlet.ServletOutputStream;
 import javax.servlet.http.HttpServletResponse;
@@ -28,24 +28,20 @@ import javax.servlet.http.HttpServletRes
  * Extends the HttpServletResponse to wrap the response and capture the results.
  */
 public final class CaptureResponseWrapper extends HttpServletResponseWrapper {
-    private final String encoding;
-    private final ServletOutputStream ops;
+
     private boolean isBinaryResponse = false;
-    private PrintWriter writer = null;
+
+    private PrintWriter writer;
+
+    private StringWriter stringWriter;
 
     /**
      * Construct a new CaptureResponseWrapper.
      *
-     * @param response
-     *            the response to wrap
-     * @param ops
-     *            the output stream to write to
+     * @param response the response to wrap
      */
-    public CaptureResponseWrapper(HttpServletResponse response,
-                           ServletOutputStream ops) {
+    public CaptureResponseWrapper(HttpServletResponse response) {
         super(response);
-        this.encoding = response.getCharacterEncoding();
-        this.ops = ops;
     }
 
     /**
@@ -57,7 +53,6 @@ public final class CaptureResponseWrappe
         return isBinaryResponse;
     }
 
-
     /*
      * (non-Javadoc)
      * @see javax.servlet.ServletResponseWrapper#flushBuffer()
@@ -96,8 +91,22 @@ public final class CaptureResponseWrappe
         if (isBinaryResponse) {
             throw new IOException("'getOutputStream()' has already been invoked for a binary data response.");
         }
-        writer = new PrintWriter(new OutputStreamWriter(ops, encoding));
+        stringWriter = new StringWriter();
+        writer = new PrintWriter(stringWriter);
         return writer;
     }
 
+    /**
+     *
+     * @return the captured character response data
+     * @throws IOException if no character response data captured
+     */
+    public String getCapturedCharacterResponse() throws IOException {
+        if (stringWriter == null) {
+            throw new IOException("no character response data captured");
+        }
+        writer.flush();
+        return stringWriter.toString();
+    }
+
 }

Modified: sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java
URL: http://svn.apache.org/viewvc/sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java?rev=1652353&r1=1652352&r2=1652353&view=diff
==============================================================================
--- sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java (original)
+++ sling/trunk/bundles/scripting/jsp-taglib/src/main/java/org/apache/sling/scripting/jsp/taglib/IncludeTagHandler.java Fri Jan 16 07:37:25 2015
@@ -26,8 +26,6 @@ import javax.servlet.http.HttpServletRes
 import javax.servlet.jsp.PageContext;
 import javax.servlet.jsp.tagext.BodyContent;
 
-import org.apache.commons.io.IOUtils;
-import org.apache.sling.scripting.core.servlet.BufferedServletOutputStream;
 import org.apache.sling.scripting.core.servlet.CaptureResponseWrapper;
 
 /**
@@ -55,19 +53,12 @@ public class IncludeTagHandler extends A
         if (var == null) {
         	dispatcher.include(request, response);
         } else {
-        	String encoding = response.getCharacterEncoding();
-        	BufferedServletOutputStream bsops = new BufferedServletOutputStream(encoding);
-        	try{
-	        	CaptureResponseWrapper wrapper = new CaptureResponseWrapper((HttpServletResponse) response, bsops);
-	        	dispatcher.include(request, wrapper);
-	        	if (! wrapper.isBinaryResponse()) {
-	        		wrapper.flushBuffer();
-	            	pageContext.setAttribute(var, bsops.getBuffer(), scope);
-	        	}
-        	}finally{
-        		IOUtils.closeQuietly(bsops);
-        	}
-        }
+			final CaptureResponseWrapper wrapper = new CaptureResponseWrapper((HttpServletResponse) response);
+			dispatcher.include(request, wrapper);
+			if (!wrapper.isBinaryResponse()) {
+				pageContext.setAttribute(var, wrapper.getCapturedCharacterResponse(), scope);
+			}
+		}
     }
 
     public void setPageContext(PageContext pageContext) {