You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2009/07/21 19:10:32 UTC

svn commit: r796388 - /myfaces/core/branches/1.2.x/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java

Author: lu4242
Date: Tue Jul 21 17:10:32 2009
New Revision: 796388

URL: http://svn.apache.org/viewvc?rev=796388&view=rev
Log:
MYFACES-1955 MyFaces 1.2.4 and WebLogic 10.3- strict servlet API: cannot call getWriter() after getOutputStream()

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

Modified: myfaces/core/branches/1.2.x/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/1.2.x/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java?rev=796388&r1=796387&r2=796388&view=diff
==============================================================================
--- myfaces/core/branches/1.2.x/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java (original)
+++ myfaces/core/branches/1.2.x/impl/src/main/java/org/apache/myfaces/application/jsp/ViewResponseWrapper.java Tue Jul 21 17:10:32 2009
@@ -86,7 +86,21 @@
         }
         else if (_byteArrayWriter != null)
         {
-            getResponse().getOutputStream().write(_byteArrayWriter.toByteArray());
+            // MYFACES-1955 cannot call getWriter() after getOutputStream()
+            // _byteArrayWriter is not null only if getOutputStream() was called
+            // before. This method is called from f:view to flush data before tag
+            // start, or if an error page is flushed after dispatch.
+            // A resource inside /faces/* (see MYFACES-1815) is handled on flushToWriter.
+            // If response.getOuputStream() was called before, an IllegalStateException
+            // is raised on response.getWriter(), so we should try through stream.
+            try
+            {
+                _byteArrayWriter.writeTo(getResponse().getWriter(), getResponse().getCharacterEncoding());
+            }
+            catch (IllegalStateException e)
+            {
+                getResponse().getOutputStream().write(_byteArrayWriter.toByteArray());
+            }
             _byteArrayWriter.reset();
             _byteArrayWriter.flush();
         }