Erro gerado a baixo:
java.lang.NullPointerException
at br.com.romaninisistemas.controlerelatorio.RelatorioEstoqueControlador.geraRelatorio(RelatorioEstoqueControlador.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.__invoke(DelegatingMethodAccessorImpl.java:43)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java)
at java.lang.reflect.Method.invoke(Method.java:498)
Meu RelatorioEstoqueControlador
package br.com.romaninisistemas.controlerelatorio;
/**
- Created by fonseca on 12/27/17.
*/
import br.com.romaninisistemas.entidade.Estoque;
import br.com.romaninisistemas.negocio.EstoqueFacade;
import br.com.romaninisistemas.util.FacesContextUtil;
import com.ocpsoft.pretty.faces.annotation.URLMapping;
import com.ocpsoft.pretty.faces.annotation.URLMappings;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.*;
@ViewScoped
@URLMappings(mappings = {
@URLMapping(id = “relatorio-estoque”, pattern = “/admin/relatorio/estoque/”, viewId = “/faces/admin/relatorios/estoque/estoquerelatorio.xhtml”)})
@ManagedBean
public class RelatorioEstoqueControlador extends AbstractReport {
public void geraRelatorio() {
try {
Estoque estoque = new Estoque();
HashMap parametros = new HashMap();
parametros.put("ID", estoque.getId());
parametros.put("descrcao", estoque.getProduto().getDescricao());
parametros.put("quantidade", estoque.getQuantidade());
parametros.put("preco", estoque.getProduto().getPreco());
super.gerarRelatorio("EstoqueRelatorio.jasper", parametros);
} catch (Exception e) {
e.printStackTrace();
FacesContextUtil.addMessageError("Problema na hora de gerar relatório!");
}
}
}
Meu AbstractReport
package br.com.romaninisistemas.controlerelatorio;
import br.com.romaninisistemas.negocio.EstoqueFacade;
import br.com.romaninisistemas.util.FacesContextUtil;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRExporterParameter;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.export.JRPdfExporter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import <a href="http://java.io">java.io</a>.*;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
/**
-
Created by fonseca on 12/27/17.
*/
@ManagedBean
@ViewScoped
public class AbstractReport implements Serializable{public AbstractReport() { injetarDependenciasSpring(); }
public final void injetarDependenciasSpring() { ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext(); SpringBeanAutowiringSupport.processInjectionBasedOnServletContext(this, servletContext); }
private Connection recuperaConexaoJDBC() { Connection conexao = null; try { InitialContext ctx = new InitialContext(); Context context = (Context) ctx.lookup(“java:/comp/env”); DataSource ds = (DataSource) context.lookup(“romaniniJNDI”); conexao = ds.getConnection(); return conexao;
} catch (SQLException ex) { System.out.println("erro ...: " + ex.getMessage() + " -> " + ex.getCause()); return conexao; } catch (Exception ex) { System.out.println("erro 1...: " + ex.getMessage() + " -> " + ex.getCause()); return conexao; }
}
public void gerarRelatorio(String arquivoJasper, HashMap parametros) throws JRException, IOException { //recupera informação do faces FacesContext facesContext = FacesContext.getCurrentInstance(); facesContext.responseComplete(); ServletContext scontext = (ServletContext) facesContext.getExternalContext().getContext(); //gera relatorio com as classes do jasper JasperPrint jasperPrint = JasperFillManager.fillReport(scontext.getRealPath("/WEB-INF/relatorios/" + arquivoJasper), parametros, recuperaConexaoJDBC()); ByteArrayOutputStream dadosByte = new ByteArrayOutputStream(); JRPdfExporter exporter = new JRPdfExporter(); exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint); exporter.setParameter(JRExporterParameter.OUTPUT_STREAM, dadosByte); exporter.exportReport(); byte[] bytes = dadosByte.toByteArray(); if (bytes != null && bytes.length > 0) { int recorte = arquivoJasper.indexOf("."); String nomePDF = arquivoJasper.substring(0, recorte); HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse(); response.setContentType(“application/pdf”); response.setHeader(“Content-disposition”, “inline; filename=”" + nomePDF + “.pdf”"); response.setContentLength(bytes.length); ServletOutputStream outputStream = response.getOutputStream(); outputStream.write(bytes, 0, bytes.length); outputStream.flush(); outputStream.close(); } }
public String getCaminhoImagem() { FacesContext facesContext = FacesContext.getCurrentInstance(); String caminho = ((ServletContext) facesContext.getExternalContext().getContext()).getRealPath("/resources/images/16x16"); caminho += “/”; return caminho; }
public String getCaminho() { FacesContext facesContext = FacesContext.getCurrentInstance(); String caminho = ((ServletContext) facesContext.getExternalContext().getContext()).getRealPath("/WEB-INF/relatorios"); caminho += “/”; return caminho; }
public void navegarEmbora() {
FacesContextUtil.redirecionamentoInterno("/admin/home/");
}
}