[ 
https://issues.apache.org/jira/browse/MYFACES-1955?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Leonardo Uribe updated MYFACES-1955:
------------------------------------

       Resolution: Fixed
    Fix Version/s: 1.2.8-SNAPSHOT
           Status: Resolved  (was: Patch Available)

After a full, very long and in deep review of this problem and the algorithm 
applied on JspViewHandler implementation, trying to find if a workaround for 
this issue is possible from myfaces side (it is a bug in weblogic but we have 
to live with it), a solution for this issue was found.

The relevant parts of the algorithm are this:

- buildView(): Set ViewResponseWrapper on 
- dispatch over wrapper. Only flushed the part before f:view. (here possible 
call to getOuputStream)
- buildView(): Set ViewResponseWrapper off
- Render view and flush over servlet response writer.
- flush remaining part

Note that at point 2, response.getOutputStream() has not been called but 
wrapper.getOutputStream(). In this point (call to flushToWrappedResponse() ), 
it is possible to try call flush through response.getWriter() instead, and 
prevent this error happening:

            try
            {
                _byteArrayWriter.writeTo(getResponse().getWriter(), 
getResponse().getCharacterEncoding());
            }
            catch (IllegalStateException e)
            {
                
getResponse().getOutputStream().write(_byteArrayWriter.toByteArray());
            }

This solution should work on all possible configurations of weblogic. I think 
the previous hack works only on servers deployed on machines with default 
encoding different than UTF-8.

> MyFaces 1.2.4 and WebLogic 10.3- strict servlet API: cannot call getWriter() 
> after getOutputStream()
> ----------------------------------------------------------------------------------------------------
>
>                 Key: MYFACES-1955
>                 URL: https://issues.apache.org/jira/browse/MYFACES-1955
>             Project: MyFaces Core
>          Issue Type: Bug
>    Affects Versions: 1.2.2, 1.2.3, 1.2.4
>         Environment: Windows Vista, WebLogic 10.3, MyFaces 1.2.4
>            Reporter: Paulo Moreira
>            Assignee: Leonardo Uribe
>             Fix For: 1.2.8-SNAPSHOT
>
>         Attachments: MYFACES-1955.patch
>
>
> I am trying to run a very simple JSF application using myFaces 1.2.4 and 
> WebLogic 10.3. The application has the following content:
> web.xml:
> <?xml version="1.0" encoding="ISO-8859-1"?>
> <web-app xmlns="http://java.sun.com/xml/ns/javaee";
>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
>     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd";
>         version="2.5">
>    <servlet>
>       <servlet-name>Faces Servlet</servlet-name>
>       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
>       <load-on-startup>1</load-on-startup>
>    </servlet>  
>    <servlet-mapping>
>       <servlet-name>Faces Servlet</servlet-name>
>       <url-pattern>*.faces</url-pattern>
>    </servlet-mapping>  
>    <welcome-file-list>
>       <welcome-file>index.html</welcome-file>
>    </welcome-file-list>
> </web-app>
> faces-config.xml:
> <?xml version="1.0"?>
> <faces-config xmlns="http://java.sun.com/xml/ns/javaee";
>         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
>         http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd";
>         version="1.2">
>    <navigation-rule>
>       <from-view-id>/index.jsp</from-view-id>
>       <navigation-case>
>          <from-outcome>login</from-outcome>
>          <to-view-id>/welcome.jsp</to-view-id>
>       </navigation-case>
>    </navigation-rule>
>    <managed-bean>
>       <managed-bean-name>user</managed-bean-name>
>       <managed-bean-class>pt.pm.richfaces.UserBean</managed-bean-class>
>       <managed-bean-scope>session</managed-bean-scope>
>    </managed-bean>
> </faces-config>
> index.html:
> <html>
>    <head>
>       <meta http-equiv="Refresh" content= "0; URL=index.faces"/>
>       <title>Start Web Application</title>
>    </head>
>    <body>
>       <p>Please wait for the web application to start...</p>
>    </body>
> </html>
> index.jsp:
> <html>
> <%@ taglib uri="http://java.sun.com/jsf/core"; prefix="f"%>
> <%@ taglib uri="http://java.sun.com/jsf/html"; prefix="h"%>
> <f:view>
>         <head>
>         <title>A Simple JavaServer Faces Application</title>
>         </head>
>         <body>
>         <h:form>
>                 <h3>Please enter your name and password.</h3>
>                 <table>
>                         <tr>
>                                 <td>Name:</td>
>                                 <td><h:inputText value="#{user.name}" /></td>
>                         </tr>
>                         <tr>
>                                 <td>Password:</td>
>                                 <td><h:inputSecret value="#{user.password}" 
> /></td>
>                         </tr>
>                 </table>
>                 <p><h:commandButton value="Login" action="login" /></p>
>         </h:form>
>         </body>
> </f:view>
> </html>
> My WEB_INF/lib contains the following jars: commons-beanutils-1.7.0, 
> commons-codec-1.3, commons-collections-3.2, commons-digester-1.8, 
> commons-discovery-0.4, commons-logging-1.1.1, glassfish.el_2.1.0, 
> glassfish.jstl_1.2.0.1, myfaces-api-1.2.4, myfaces-impl-1.2.4.
> Whenever I try to run my application I get the following exception:
> java.lang.IllegalStateException: strict servlet API: cannot call getWriter() 
> aft
> er getOutputStream()
>         at 
> weblogic.servlet.internal.ServletResponseImpl.getWriter(ServletRespon
> seImpl.java:308)
>         at 
> org.apache.myfaces.application.jsp.JspViewHandlerImpl.renderView(JspV
> iewHandlerImpl.java:362)
>         at 
> org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderRes
> ponseExecutor.java:41)
>         at 
> org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:
> 140)
>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:155)
> If instead of using myFaces I use the Sun Reference implementation everything 
> goes well. If I deploy the application (using myFaces) in JBoss 5 it works 
> well. So the problem seems to be related with the use of WLS 10.3 and myFaces 
> 1.2.4.
> I tried with 1.2.3 and 1.2.2 and got the issue with both. I tried with 1.2.0 
> and got another error:
> javax.faces.FacesException: weblogic.servlet.jsp.CompilationException: Failed 
> to compile JSP /index.jsp
> index.jsp:14:22: Static attribute must be a String literal, its illegal to 
> specify an expression.
>                                 <td><h:inputText value="#{user.name}" /></td>

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to