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.
grinche
Outubro 13, 2012, 12:58am
#4
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.