Estou com uma aplicação Java Web instalada em um servidor debian lenny, com o postgreSQL 8.3, apache-tomcat-6.0.26, jasperreports-3.0.0 e jdk-6u21-linux-i586. Estou utilizando Facelets e Faces Servlet. A aplicação está em arquivo.WAR funcionando perfeitamente…
O problema é que, quando vou acessar a opção de relatórios, e clicar no link para download do mesmo, ele me retorna esse erro:
ava.lang.IllegalStateException: Servlet response already use stream, Writer not possible
at org.ajax4jsf.webapp.FilterServletResponseWrapper.getWriter(FilterServletResponseWrapper.java:226)
at com.sun.facelets.FaceletViewHandler.createResponseWriter(FaceletViewHandler.java:416)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:573)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:108)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:237)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:307)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:141)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:281)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.gov.rr.setrabes.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:21)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
O interessante é que no meu computador, no eclipse, funciona perfeitamente…
Servlet response already use stream, Writer not possible
No entanto os relatórios da aplicação estavam funcionando. O erro começou após atualização das libs de RichFaces 3.3.3 e Jasper 3.7 e recompilação dos relatórios usando as novas libs.
Estou avaliando alguma incompatibilidade entre as bibliotecas.
Em minhas buscas conferi como em outros posts.
[quote=Java Lover]Estou com este mesmo problema :thumbdown:
Servlet response already use stream, Writer not possible
No entanto os relatórios da aplicação estavam funcionando. O erro começou após atualização das libs de RichFaces 3.3.3 e Jasper 3.7 e recompilação dos relatórios usando as novas libs.
Estou avaliando alguma incompatibilidade entre as bibliotecas.
Em minhas buscas conferi como em outros posts.[/quote]
Brow, o interessante é que na aplicação funciona perfeitamente… inclusive uso as mesmas lib’s do projeto…
Encontrei uma dica que pra mim não funcionou, mas vc pode verificar se é seu caso.
Incluir no final do seu metodo que é invocado no seu ManagedBean.FacesContext.getCurrentInstance().responseComplete();
Verifiquei a origem da mensagem no método getWriter:
public PrintWriter getWriter() throws IOException {
if (useStream) {
throw new IllegalStateException(Messages.getMessage(Messages.NO_WRITER_POSSIBLE_ERROR));
}
if (printWriter == null) {
if (log.isDebugEnabled()) {
log.debug(Messages.getMessage(Messages.CREATE_WRITER_INFO));
}
printWriter = new PrintWriter(new ServletStringWriter());
useWriter = true;
}
return printWriter;
}
O atributo useStream é setado true no método getOutputStream:
public ServletOutputStream getOutputStream() throws IOException {
if (useWriter) {
if (isUseNullStream()) {
return new NullServletOutputStream();
}
throw new IllegalStateException(Messages.getMessage(Messages.NO_STREAM_POSSIBLE_ERROR));
}
if (servletOutputStream == null) {
servletOutputStream = new ByteArrayServletOutputStream();
}
if (log.isDebugEnabled()) {
log.debug(Messages.getMessage(Messages.CREATE_STREAM_INFO));
}
useStream = true;
return servletOutputStream;
}
Considerando que:public class FilterServletResponseWrapper extends HttpServletResponseWrapper {
Pensei que pudesse ser um problema de caminho dos arquivos, mas eu conferi e está tudo certinho…
Complicado isso…
Se tiver alguma novidade, aguardo.
Vlw.
[quote=Java Lover]Encontrei uma dica que pra mim não funcionou, mas vc pode verificar se é seu caso.
Incluir no final do seu metodo que é invocado no seu ManagedBean.FacesContext.getCurrentInstance().responseComplete();
Verifiquei a origem da mensagem no método getWriter:
public PrintWriter getWriter() throws IOException {
if (useStream) {
throw new IllegalStateException(Messages.getMessage(Messages.NO_WRITER_POSSIBLE_ERROR));
}
if (printWriter == null) {
if (log.isDebugEnabled()) {
log.debug(Messages.getMessage(Messages.CREATE_WRITER_INFO));
}
printWriter = new PrintWriter(new ServletStringWriter());
useWriter = true;
}
return printWriter;
}
O atributo useStream é setado true no método getOutputStream:
public ServletOutputStream getOutputStream() throws IOException {
if (useWriter) {
if (isUseNullStream()) {
return new NullServletOutputStream();
}
throw new IllegalStateException(Messages.getMessage(Messages.NO_STREAM_POSSIBLE_ERROR));
}
if (servletOutputStream == null) {
servletOutputStream = new ByteArrayServletOutputStream();
}
if (log.isDebugEnabled()) {
log.debug(Messages.getMessage(Messages.CREATE_STREAM_INFO));
}
useStream = true;
return servletOutputStream;
}
Considerando que:public class FilterServletResponseWrapper extends HttpServletResponseWrapper {[/quote]
Bom dia.
Me diz duas coisas?
Você está com o seu sistema em um servidor linux ou rodando diretamente do seu pc?
Quais versões você estava utilizando das libs do richfaces, jasper, iText antes de dar esse problema??
Pode ser alguma incompatibilidade entre essas versões de libs.
Aguardo resposta.
Abs.
[quote=Java Lover]Encontrei uma dica que pra mim não funcionou, mas vc pode verificar se é seu caso.
Incluir no final do seu metodo que é invocado no seu ManagedBean.FacesContext.getCurrentInstance().responseComplete();
Verifiquei a origem da mensagem no método getWriter:
public PrintWriter getWriter() throws IOException {
if (useStream) {
throw new IllegalStateException(Messages.getMessage(Messages.NO_WRITER_POSSIBLE_ERROR));
}
if (printWriter == null) {
if (log.isDebugEnabled()) {
log.debug(Messages.getMessage(Messages.CREATE_WRITER_INFO));
}
printWriter = new PrintWriter(new ServletStringWriter());
useWriter = true;
}
return printWriter;
}
O atributo useStream é setado true no método getOutputStream:
public ServletOutputStream getOutputStream() throws IOException {
if (useWriter) {
if (isUseNullStream()) {
return new NullServletOutputStream();
}
throw new IllegalStateException(Messages.getMessage(Messages.NO_STREAM_POSSIBLE_ERROR));
}
if (servletOutputStream == null) {
servletOutputStream = new ByteArrayServletOutputStream();
}
if (log.isDebugEnabled()) {
log.debug(Messages.getMessage(Messages.CREATE_STREAM_INFO));
}
useStream = true;
return servletOutputStream;
}
Considerando que:public class FilterServletResponseWrapper extends HttpServletResponseWrapper {[/quote]
Pessoal, descobri o motivo do erro, porém ainda não consegui soluciona-lo: Estive verificando os logs do tomcat no servidor, e apareceu essa exception durante a chamada do relatório:
[code]23/11/2010 10:28:49 javax.faces.event.MethodExpressionActionListener processAction
GRAVE: Received ‘java.lang.NullPointerException’ when invoking action listener ‘#{orgaogestorHandler.imprimirRelatorio}’ for component ‘btcodOg’
23/11/2010 10:28:49 javax.faces.event.MethodExpressionActionListener processAction
GRAVE: java.lang.NullPointerException
at java.io.File.<init>(File.java:222)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:534)
at br.gov.rr.setrabes.handler.OrgaoGestorHandler.imprimirRelatorio(OrgaoGestorHandler.java:367)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:88)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:77)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:743)
at javax.faces.component.UICommand.broadcast(UICommand.java:368)
at org.ajax4jsf.component.UIDataAdaptorBase.broadcast(UIDataAdaptorBase.java:1387)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329)
at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304)
at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261)
at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:474)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:530)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.gov.rr.setrabes.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:21)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
10:28:49,841 ERROR AjaxViewRoot:335 - Error processing faces event for the component buscaorgaogestor:orgaosGestoresByNome:0
javax.faces.event.AbortProcessingException: /pages/relatorio/listaOrgaogestor.xhtml @36,104 actionListener="#{orgaogestorHandler.imprimirRelatorio}": java.lang.NullPointerException
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:107)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:77)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:743)
at javax.faces.component.UICommand.broadcast(UICommand.java:368)
at org.ajax4jsf.component.UIDataAdaptorBase.broadcast(UIDataAdaptorBase.java:1387)
at org.ajax4jsf.component.AjaxViewRoot.processEvents(AjaxViewRoot.java:329)
at org.ajax4jsf.component.AjaxViewRoot.broadcastEventsForPhase(AjaxViewRoot.java:304)
at org.ajax4jsf.component.AjaxViewRoot.processPhase(AjaxViewRoot.java:261)
at org.ajax4jsf.component.AjaxViewRoot.processApplication(AjaxViewRoot.java:474)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:530)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.gov.rr.setrabes.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:21)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NullPointerException
at java.io.File.<init>(File.java:222)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:534)
at br.gov.rr.setrabes.handler.OrgaoGestorHandler.imprimirRelatorio(OrgaoGestorHandler.java:367)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:88)
… 36 more
23/11/2010 10:28:49 com.sun.facelets.FaceletViewHandler handleRenderException
GRAVE: Error Rendering View[/pages/relatorio/relatorioOrgaogestor.xhtml]
java.lang.IllegalStateException: Servlet response already use stream, Writer not possible
at org.ajax4jsf.webapp.FilterServletResponseWrapper.getWriter(FilterServletResponseWrapper.java:209)
at com.sun.facelets.FaceletViewHandler.createResponseWriter(FaceletViewHandler.java:416)
at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:573)
at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:106)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:144)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:245)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:530)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
at org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)
at org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
at org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at br.gov.rr.setrabes.util.HibernateSessionFilter.doFilter(HibernateSessionFilter.java:21)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)[/code]
Algum problema relacionado ao método de impressão, mas que só acontece com a aplicação no servidor, e não acontece com a aplicação rodando pelo eclipse… Vou dar uma pesquisada, e qualquer novidade, eu posto a solução.
Se alguem tiver alguma dica, favor postar, mas lembrem-se de que a aplicação funciona perfeitamente rodando pelo eclipse, sem nenhuma exception.
Tive um problema igual… no meu caso os downloads pra alguns relatórios funcionavam e pra outro não.
Qual foi o ponto, quando vai trazer os dados na tela (JSF) e existe um dado NULL, o próprio JSF trata e deixa o campo como vazio, no meu caso eu estava tentando mandar umas Datas nulas para o EXCEL e isso estava causando o mesmo erro que você apontou.
O que eu fiz, tratei para quando o campo fosse NULO eu inserisse vazio.
if(opList.getDataExpiracaoTreinamento() != null){
label = new Label(7, line, new SimpleDateFormat("dd/MM/yyyy").format(opList.getDataExpiracaoTreinamento()), TextItem);
s.addCell(label);
}else{
label = new Label(7, line, getBlankNull(""), TextItem);
s.addCell(label);
}
Espero ter ajudado alguém com esse tipo de problema