You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ma...@apache.org on 2007/05/18 06:53:19 UTC

svn commit: r539257 - /myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java

Author: matzew
Date: Thu May 17 21:53:18 2007
New Revision: 539257

URL: http://svn.apache.org/viewvc?view=rev&rev=539257
Log:
MYFACES-1621 ViewResponseWrapper does not wrapped the OutputStreams

Modified:
    myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java

Modified: myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java?view=diff&rev=539257&r1=539256&r2=539257
==============================================================================
--- myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java (original)
+++ myfaces/core/branches/jsf12/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java Thu May 17 21:53:18 2007
@@ -3,9 +3,11 @@
 import java.io.CharArrayWriter;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.io.ByteArrayOutputStream;
 
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponseWrapper;
+import javax.servlet.ServletOutputStream;
 
 /**
  * @author Bruno Aranda (latest modification by $Author$)
@@ -16,6 +18,7 @@
     private PrintWriter _writer;
     private CharArrayWriter _charArrayWriter;
     private int _status = HttpServletResponse.SC_OK;
+    private WrappedServletOutputStream _byteArrayWriter;
 
     public ViewResponseWrapper(HttpServletResponse httpServletResponse)
     {
@@ -56,16 +59,31 @@
     }
 
     public void flushToWrappedResponse() throws IOException
-    {
-        _charArrayWriter.writeTo(getResponse().getWriter());
-        _charArrayWriter.reset();
-        _writer.flush();
-        
+    {   if (_charArrayWriter != null) {
+            _charArrayWriter.writeTo(getResponse().getWriter());
+            _charArrayWriter.reset();
+            _writer.flush();
+        } else if (_byteArrayWriter != null) {
+            getResponse().getOutputStream().write(_byteArrayWriter.toByteArray());
+            _byteArrayWriter.reset();
+            _byteArrayWriter.flush();
+        }
+
+    }
+
+    @Override
+    public ServletOutputStream getOutputStream() throws IOException {
+        if (_charArrayWriter != null ) throw new IllegalStateException();
+        if (_byteArrayWriter == null ) {
+            _byteArrayWriter = new WrappedServletOutputStream();
+        }
+        return _byteArrayWriter;
     }
 
     @Override
     public PrintWriter getWriter() throws IOException
     {
+        if (_byteArrayWriter != null ) throw new IllegalStateException();
         if (_writer == null)
         {
             _charArrayWriter = new CharArrayWriter(4096);
@@ -73,7 +91,8 @@
         }
         return _writer;
     }
-    
+
+    @Override
     public void reset()
     {
         if (_charArrayWriter != null)
@@ -92,4 +111,25 @@
         return null;
     }
 
-}
\ No newline at end of file
+    static class WrappedServletOutputStream extends ServletOutputStream {
+        private ByteArrayOutputStream _byteArrayOutputStream;
+
+
+        public WrappedServletOutputStream() {
+            _byteArrayOutputStream = new ByteArrayOutputStream(1024);
+        }
+
+        public void write(int i) throws IOException {
+           _byteArrayOutputStream.write(i);
+        }
+
+        public byte[] toByteArray() {
+            return _byteArrayOutputStream.toByteArray();
+        }
+
+        public void reset() {
+            _byteArrayOutputStream.reset();
+        }
+        
+    }
+}