Boa noite pessoal
Estou tentando fazer com que o download do relatório seja efetuado através do componente p:fileDownload, porém está com um erro muito estranho
Jul 22, 2013 9:39:42 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Faces Servlet threw exception
java.lang.NullPointerException
at org.primefaces.component.filedownload.FileDownloadActionListener.processAction(FileDownloadActionListener.java:53)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:818)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:646)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:344)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:110)
at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:98)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:95)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:79)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.rememberme.RememberMeAuthenticationFilter.doFilter(RememberMeAuthenticationFilter.java:120)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:55)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:36)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:188)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:106)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:80)
at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:356)
at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:150)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at financeiro.web.filter.ConexaoHibernateFilter.doFilter(ConexaoHibernateFilter.java:24)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
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:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:724)
Tenho o seguinte método no Bean
[code]public StreamedContent getArquivoRetorno() {
FacesContext context = FacesContext.getCurrentInstance();
ContextoBean contextoBean = ContextoUtil.getContextoBean();
String usuario = contextoBean.getUsuarioLogado().getLogin();
String nomeRelatorioJasper = “contas”;
String nomeRelatorioSaida = usuario + “_contas”;
RelatorioUtil relatorioUtil = new RelatorioUtil();
HashMap<String, Integer> parametrosRelatorio = new HashMap<String, Integer>();
parametrosRelatorio.put(“codigoUsuario”, contextoBean.getUsuarioLogado().getCodigo());
try {
this.arquivoRetorno = relatorioUtil.gerarRelatorio(parametrosRelatorio, nomeRelatorioJasper, nomeRelatorioSaida, this.tipoRelatorio);
}
catch (UtilException e) {
context.addMessage(null, new FacesMessage(e.getMessage()));
return null;
}
return this.arquivoRetorno;
}[/code]
E tenho os seguintes métodos na classe RelatorioUtil
[code]public StreamedContent gerarRelatorio(HashMap<String, Integer> parametrosRelatorio, String nomeRelatorioJasper,
String nomeRelatorioSaida, int tipoRelatorio) throws UtilException {
StreamedContent arquivoRetorno = null;
try {
FacesContext context = FacesContext.getCurrentInstance();
Connection conexao = this.getConexao();
String caminhoRelatorio = context.getExternalContext().getRealPath(“relatorios”);
String caminhoArquivoJasper = caminhoRelatorio + File.separator + nomeRelatorioJasper + “.jasper”;
String caminhoArquivoRelatorio = null;
JasperReport relatorioJasper = (JasperReport) JRLoader.loadObject(caminhoArquivoJasper);
JasperPrint impressoraJasper = JasperFillManager.fillReport(relatorioJasper, parametrosRelatorio, conexao);
JRExporter tipoArquivoExportado = null;
String extensaoArquivoExportado = "";
File arquivoGerado = null;
switch (tipoRelatorio) {
case RelatorioUtil.RELATORIO_PDF:
tipoArquivoExportado = new JRPdfExporter();
extensaoArquivoExportado = "pdf";
break;
case RelatorioUtil.RELATORIO_HTML:
tipoArquivoExportado = new JRHtmlExporter();
extensaoArquivoExportado = "html";
break;
case RelatorioUtil.RELATORIO_EXCEL:
tipoArquivoExportado = new JRXlsExporter();
extensaoArquivoExportado = "xls";
break;
case RelatorioUtil.RELATORIO_PLANILHA_OPEN_OFFICE:
tipoArquivoExportado = new JROdtExporter();
extensaoArquivoExportado = "ods";
break;
default:
tipoArquivoExportado = new JRPdfExporter();
extensaoArquivoExportado = "pdf";
break;
}
caminhoArquivoRelatorio = caminhoRelatorio + File.separator + nomeRelatorioSaida + "." + extensaoArquivoExportado;
arquivoGerado = new File(caminhoArquivoRelatorio);
tipoArquivoExportado.setParameter(JRExporterParameter.JASPER_PRINT, impressoraJasper);
tipoArquivoExportado.setParameter(JRExporterParameter.OUTPUT_FILE, arquivoGerado);
tipoArquivoExportado.exportReport();
arquivoGerado.deleteOnExit();
InputStream conteudoRelatorio = new FileInputStream(arquivoGerado);
arquivoRetorno = new DefaultStreamedContent(conteudoRelatorio, "application/" + extensaoArquivoExportado,
nomeRelatorioSaida + "." + extensaoArquivoExportado);
}
catch (JRException e) {
throw new UtilException("Não foi possível gerar o relatório.", e);
}
catch (FileNotFoundException e) {
throw new UtilException("Arquivo do relatório não encontrado.", e);
}
return arquivoRetorno;
}
private Connection getConexao() throws UtilException {
Connection conexao = null;
try {
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env/");
DataSource ds = (DataSource) envContext.lookup("jdbc/FinanceiroDB");
conexao = (Connection) ds.getConnection();
}
catch (NamingException e) {
throw new UtilException("Não foi possível encontrar o nome da conexão do banco.", e);
}
catch (SQLException e) {
throw new UtilException("Ocorreu um erro de SQL.", e);
}
return conexao;
}[/code]
E no arquivo xhtml, tenho os seguintes componentes:
<h:panelGrid columns="4">
<h:form id="impressao">
<h:commandLink>
<f:setPropertyActionListener target="#{contaBean.tipoRelatorio}" value="1" />
<p:fileDownload value="#{contaBean.arquivoRetorno}" />
<h:graphicImage library="imagens" name="pdf.png" title="Imprimir PDF" />
</h:commandLink>
<h:commandLink>
<f:setPropertyActionListener target="#{contaBean.tipoRelatorio}" value="2" />
<p:fileDownload value="#{contaBean.arquivoRetorno}" />
<h:graphicImage library="imagens" name="excel.png" title="Imprimir Excel" />
</h:commandLink>
<h:commandLink>
<f:setPropertyActionListener target="#{contaBean.tipoRelatorio}" value="3" />
<p:fileDownload value="#{contaBean.arquivoRetorno}" />
<h:graphicImage library="imagens" name="html.png" title="Imprimir HTML" />
</h:commandLink>
<h:commandLink>
<f:setPropertyActionListener target="#{contaBean.tipoRelatorio}" value="4" />
<p:fileDownload value="#{contaBean.arquivoRetorno}" />
<h:graphicImage library="imagens" name="ods.png" title="Imprimir Planilha Open Office" />
</h:commandLink>
</h:form>
</h:panelGrid>
Não consegui entender onde meu arquivo pode estar nulo
Enfim, como disse em outro tópico, estou estudando o livro Programação Java para a Web, que é um excelente livro
Mas me deparei com esse erro, e to tentando descobrir o que é
Se alguém tiver alguma dica, fico mto agradecido
Boa noite
