Problema ao gerar relatório - HTTP Status 500 - getOutputStream() has already been called for t

Pessoal, estou chamando um método que gera relatório em pdf em uma aplicação web e esta dando o seguinte erro:

HTTP Status 500 - getOutputStream() has already been called for this response

Alguém sabe o que pode estar ocorrendo?. Segue abaixo o método que gera o relatório.


public void geraRecibo(Integer codigop) throws Exception {

		HashMap<String, Object> recibo = new HashMap<String, Object>();

		recibo.put("lancamento", codigop);

		geraPDF.executarRelatorio("./relatoriosjaspers/recibo.jasper", recibo);

Desde já agradeço.

Valeu.

Verifica o fluxo inteiro quando você recebe a requisição.

Em algum ponto o output do response está sendo utilizado antes de ocorre o erro.

Tenta fazer um debug, melhor forma.

Olá William até fiz o debug e observei que o erro acontece quando executa o método gerarPDF.


public void geraRecibo(Integer codigop) throws Exception {

		
		HashMap<String, Object> recibo = new HashMap<String, Object>();

		recibo.put("lanca", codigop);

                //o problema esta nesse método desconfio mas nao consigo identificar  :( 
		geraPDF.executarRelatorio("./relatoriosjaspers/recibo.jasper", recibo);

		System.out.println(codigop);

	}

package util;

import java.io.InputStream;
import java.sql.Connection;
import java.util.HashMap;
import java.util.Map;

import javax.faces.context.FacesContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperRunManager;

public class ReportUtil {

	private static String ERRO_MENSAGEM_REPORT = "Um erro ocorreu quando o relatório estava sendo executado.";

	// executa o relatório através de um JRBeanCollectionDataSource
	public static void executarRelatorio(String caminhoRelatorio,
			Map<String, Object> parametros) throws Exception {

		Connection conexao = ConnectionFactory.getConnection();

		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) context
				.getExternalContext().getResponse();

		// pega o caminho do arquivo .jasper da aplicação
		InputStream reportStream = context.getExternalContext()
				.getResourceAsStream(caminhoRelatorio);

		// envia a resposta com o MIME Type
		response.setContentType("application/pdf");

		ServletOutputStream servletOutputStream = response.getOutputStream();

		// envia parametros para o relatorio
		if (parametros == null) {
			parametros = new HashMap<String, Object>();
		}

		// envia para o navegador o PDF gerado
		JasperRunManager.runReportToPdfStream(reportStream,
				servletOutputStream, parametros, conexao);

		servletOutputStream.flush();
		servletOutputStream.close();

		context.responseComplete();
		conexao.close();
	}
}

Alguma sugestão???

Desde já agradeço.

Renan.

Poste por completo o erro que esta no console.
Pode ser alguma propriedade ou coluna que tu esta utilizando no seu relatório que não existe mais, entre tantas outras coisas…

[]`s

Pessoal consegui resolver…o problema foi que estou passando um código inteiro e o Hash Map esta passando um objeto e devido a isso estava ocorrendo o erro, portanto, apenas mudei a class do parametro do relatório para java.lang.Object e resolveu.

Obrigado.

Abraços.

Renan.