Opa!
Pessoal estou com um problema aqui!
Estou usando a API do BIRT para gerar arquivo pdf para os meus relatórios, que já existem em rptdesign, numa pasta já informada.
Vou colocar a parte do código que interessa aqui para darem uma olhada.
Debuggando, o erro acontece na linha comentada.
//ObjRel = ObjetoRelatorio de sessão.
//getNomeRela() = retorna nome do relatorio
//montaNomeRelatorio() = constroi uma string com buscaLocal(), que retorna a pasta já declada.
resp.setContentType("application/pdf");
resp.setHeader("Content-Disposition",
"inline; filename=" + ObjRel.relatorio.getNomerela() +
".pdf");
IRenderTask task;
report_design = ObjRel.montaNomeRelatorio();
report_document = ObjRel.buscaLocal() + "pdfbug_reportdocument";
try {
createReportDocument(report_design, report_document);
IReportDocument reportDoc =
birtReportEngine.openReportDocument(report_document);
IRenderOption pdfRenderOptions = new HTMLRenderOption();
HTMLRenderContext renderContext = new HTMLRenderContext();
HashMap appContext = new HashMap();
appContext.put(EngineConstants.APPCONTEXT_HTML_RENDER_CONTEXT,
renderContext);
pdfRenderOptions.setOutputFormat("pdf");
pdfRenderOptions.getOutputSetting().put(HTMLRenderOption.URL_ENCODING,
"UTF-8");
outputFileName =
ObjRel.buscaLocal() + ObjRel.getRelatorio().getNomerela() +
".pdf";
removeFile(outputFileName);
pdfRenderOptions.setOutputFileName(outputFileName);
task = birtReportEngine.createRenderTask(reportDoc);
task.setLocale(Locale.ENGLISH);
task.setAppContext(appContext);
task.setRenderOption(pdfRenderOptions);
ObjRel.setPdf(false);
task.render(); //esta é a linha onde o erro ocorre
task.close();
} catch (Exception e) {
e.printStackTrace();
throw new ServletException(e);
}
O erro gerado é o seguinte…
javax.faces.FacesException: javax.servlet.ServletException: Error in servlet
at com.sun.faces.context.ExternalContextImpl.dispatch(ExternalContextImpl.java:327)
at com.sun.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:130)
at oracle.adfinternal.view.faces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:157)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:87)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)
.....
Caused by: javax.servlet.ServletException: Error in servlet
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:773)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376)
at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.ServletRequestDispatcher.unprivileged_forward(ServletRequestDispatcher.java:298)
Tenho algumas dúvidas, como suspeitas:
1 - será que esse código não é válido para um servlet, sendo que este codigo faz parte do metodo get, e entao deveria eu construir um IRunAndRenderTask ao inves de IRenderTask?
2 - será que devo mudar o tipo de response contentType?
3 - alguém me ajuda? ^^
Prolixamente,
Scott