Prezados,
Estou começando a trabalhar com Jasper. O framework me pareceu maravilhoso, mas estou enfrentando problemas para integrá-lo com uma aplicação existente em struts (1.1).
Eu criei uma classe executável dentro do projeto para testar a chamada do relatório. Rodei e tudo OK. Gerou o relatório como deveria. Eis o código:
package intranet.action;
import intranet.db.Database;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.HashMap;
import net.sf.jasperreports.engine.JasperRunManager;
public class Test {
public static void main(String args[]) {
byte[] bytes = null;
try {
FileInputStream fis = new FileInputStream(new File("C:\\Program Files\\JasperSoft\\iReport-2.0.3\\teste.jasper"));
bytes = JasperRunManager.runReportToPdf(fis, new HashMap(), Database.getConnection());
FileOutputStream fos = new FileOutputStream("C:\\teste.pdf");
fos.write(bytes, 0, bytes.length);
fos.flush();
fos.close();
} catch (Exception e) {
e.printStackTrace();
} finally {
}
}
}
Feito isto, resolvi criar uma action e colocar o mesmo código para gerar o relatório. Ocorre que ao executar esta linha o fluxo de execução pára e nenhuma exceção é gerada, dificultando a detecção do problema:
bytes = JasperRunManager.runReportToPdf(fis, new HashMap(), Database.getConnection());
Eis o Código do método da action que executa a chamada do relatório:
public ActionForward geraRelatorioTeste(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
ServletOutputStream servletOutputStream = response.getOutputStream();
byte[] bytes = null;
try {
// Cheguei a utilizar esta referência absoluta ao .jasper para investigar. Mas nem assim deu certo!
File f = new File("C:\\Program Files\\JasperSoft\\iReport-2.0.3\\teste.jasper");
InputStream fis = new FileInputStream(f);
bytes = JasperRunManager.runReportToPdf(fis, new HashMap(), Database.getConnection());
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
servletOutputStream.write(bytes, 0, bytes.length);
servletOutputStream.flush();
servletOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}