[ 
https://issues.apache.org/jira/browse/MYFACES-3695?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13581391#comment-13581391
 ] 

Jack van Ooststroom commented on MYFACES-3695:
----------------------------------------------

Might be worth mentioning here as well that I opened a similar ticket for 
Mojarra: http://java.net/jira/browse/JAVASERVERFACES-2739
                
> 'Cannot set header. Response already committed.' on WebSphere Application 
> Server 7 and 8
> ----------------------------------------------------------------------------------------
>
>                 Key: MYFACES-3695
>                 URL: https://issues.apache.org/jira/browse/MYFACES-3695
>             Project: MyFaces Core
>          Issue Type: Bug
>          Components: JSR-314
>    Affects Versions: 2.1.10
>         Environment: WebSphere Application Server 7 or 8
>            Reporter: Jack van Ooststroom
>
> When trying to handle a resource using the default implementation of 
> ResourceHandler, namely ResourceHandlerImpl, a warning message is logged when 
> running on WebSphere Application Server 7 or 8:
> W com.ibm.ws.webcontainer.srt.SRTServletResponse setIntHeader SRVE8094W: 
> WARNING: Cannot set header. Response already committed.
> Looking at the code of ResourceHandlerImpl.handleResourceRequest(FacesContext 
> context) I found the following snippet:
>             try
>             {
>                 InputStream in = resource.getInputStream();
>                 OutputStream out = httpServletResponse.getOutputStream();
>                 //byte[] buffer = new byte[_BUFFER_SIZE];
>                 byte[] buffer = new byte[this.getResourceBufferSize()];
>     
>                 try
>                 {
>                     int count = pipeBytes(in, out, buffer);
>                     //set the content lenght
>                     httpServletResponse.setContentLength(count);
>                 }
>                 finally
>                 {
>                     try
>                     {
>                         in.close();
>                     }
>                     finally
>                     {
>                         out.close();
>                     }
>                 }
>             }
> If the resource is small enough and the buffer limit is not reached 
> everything should be fine (default size seems 2048), however if the resource 
> is bigger the buffer gets flushed WebSphere Application Server will use 
> chunked encoding and the httpServletResponse.setContentLength(count) gets 
> executed after the fact resulting in the mentioned message. Setting the 
> org.apache.myfaces.RESOURCE_BUFFER_SIZE context parameter is a possible 
> workaround, but it would be better to avoid this as resource sizes can be 
> unpredictable.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to