iReport ..gerando relatório da erro Cannot forward after response has been committed

iReport …gerando relatório da erro Cannot forward after response has been committed

Olá,

estou usando um servlet e uma classe com interface para gerar relatório
com jasper mais está me dando o erro abaixo

Até gera o relatório mas não estou visualizando onde dá esse erro ???

Se alguém puder me ajudar …

abs


09/02/2009 18:03:38 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet action threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:312)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at br.com.XXX.relatorio.servlet.ServletAction.service(ServletAction.java:37)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	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:128)
	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:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)

public class R01Action implements Action {
	EntityManager                 manager = null;
	private  EntityManagerFactory emf  = null;
	
	 private static final String CONTENT_TYPE_PDF  = "application/pdf";
	 OutputStream ops = null;  
	 
	public R01Action(){
	}
	public String execute(HttpServletRequest request,HttpServletResponse response) throws SQLException, IOException {
		
		System.out.println("Wait while loadding Report..."); 
		 
		emf = Persistence.createEntityManagerFactory("XXX");
		manager =  emf.createEntityManager();	
   

		
		Session session = (Session) manager.getDelegate();
		Connection con = session.connection();
		try{
		  	
  			Map parameters = new HashMap();
  			System.out.println("Tipo de Grupo = "+request.getParameter("tipo_grupo"));
  			parameters.put("tipo_grupo", Long.valueOf(request.getParameter("tipo_grupo")));
  			
  			String jasper = request.getContextPath()+ "/reports/XXXGrupo001.jasper";   
  			String host = "http://" + request.getServerName() + ":" + request.getServerPort();   
  			
  			URL jasperURL        = new URL(host + jasper);
  			
  			System.out.println("Getting the binary...");   

  			response.setContentType(CONTENT_TYPE_PDF);   
  			byte[] bytes = JasperRunManager.runReportToPdf(jasperURL.openStream(), parameters, con);   

  			 if (bytes != null) {   
  		             ops = response.getOutputStream();   
  		                     System.out.println("Writting binary");   
  		             ops.write(bytes);   
  		             System.out.println("Sending report...");   
  		     }   

		 
		} catch (JRException e) {
			e.printStackTrace();
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}finally{
			con.close();	
			manager.close();
			emf.close();
			
   
	             if (ops != null) {   
	                ops.flush();   
	                ops.close();   
	             }   
	             try {   
	                con.close();   
	             } catch (SQLException ex1) {   
	                ex1.printStackTrace();   
	             }   

			
		}
		
		return null;
	}

}

public class ServletAction extends HttpServlet {
	RequestDispatcher  rd=null;

	public ServletAction() {
	}
	public void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       try {
            String acao = req.getParameter("acao");
           
            Class clazz = Class.forName("br.com.relatorio.action." + acao + "Action");
            
          
            Action action = (Action) clazz.newInstance();
            String Mapping = action.execute(req,resp);
            
            rd = req.getRequestDispatcher(Mapping);

            rd.forward(req,resp);
           
       }catch(Exception e){
    	   req.setAttribute("erro", e);
    	   rd = req.getRequestDispatcher("/pagina/erro.jsp");
    	   rd.forward(req,resp);
    	   System.out.println("Erro="+e);
       }
	}   
}

Estou com este mesmo problema. Tenho um servlet (action do struts) que faz a chamada a uma classe que contem o método para gerar o relatório em pdf.

No final do método é feito:

        ServletOutputStream sos = response.getOutputStream();
        sos.write(arquivo, 0, arquivo.length);
        sos.flush();
        sos.close();

e após a chamada do método, é dado um forward para o jsp seguinte. Segundo o erro, não pode ter um forward após uma manipulação com o response:

[quote]Servlet.service() for servlet action threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed[/quote]

Alguém conhece uma outra forma de gerar pdf? Sei que google responde, mas até agora, os exemplos que encontrei não foram suficientes para resolver meu problema.

Desde já, obrigada =)