Há vários meses que venho recebendo o alerta getOutputStream() has already been called for this response no meu log do JBoss AS 7 quando envio um relatório PDF (gerado pelo iText) do servidor para o cliente.

 

Após pesquisas realizadas no passado concluí que eu poderia ignorar o alerta, pois ele não representava nenhum risco aparente. Apesar disso não havia encontrado uma solução para ao menos evitar que esta mensagem incoveniente desaparecesse dos meus logs.

 

Entretanto em uma nova pesquisa encontrei a solução. Segundo o Ramki Java Blog, depois que o pdf é escrito na resposta HTTP, o próprio servlet JSF tenta "re-abrir" a resposta para escrever o HTML renderizado do estágio de renderização do ciclo de vida do JSF. Portanto a solução é dizer ao JSF que a resposta está completa e para pular o resto do ciclo. Para isso é necessário apenas inserir o seguinte código ao final do método que escreve o PDF:

 

 

FacesContext.getCurrentInstance().responseComplete();