[RESOLVIDO] JRBeanCollectionDataSource + Ireport

4 respostas
P

Bom pessoal estou tentando gerar um relatório(ireport) na web utilizando em meu servlet o JRBeanCollectionDataSource e visualizá-lo em pdf. As classes são estas abaixo:

Livro.java

public class Livro {
	
	private String titulo;
	private String autor;
	private String isbn;
	private String editora;
	private String descricao;
	
	public Livro(){
		
	}
	
	public Livro(String titulo, String autor, String isbn, String editora, String descricao) {
		super();
		this.titulo = titulo;
		this.autor = autor;
		this.isbn = isbn;
		this.editora = editora;
		this.descricao = descricao;
	}
	
	public String getAutor() {
		return autor;
	}
	public void setAutor(String autor) {
		this.autor = autor;
	}
	public String getDescricao() {
		return descricao;
	}
	public void setDescricao(String descricao) {
		this.descricao = descricao;
	}
	public String getEditora() {
		return editora;
	}
	public void setEditora(String editora) {
		this.editora = editora;
	}
	public String getIsbn() {
		return isbn;
	}
	public void setIsbn(String isbn) {
		this.isbn = isbn;
	}
	public String getTitulo() {
		return titulo;
	}
	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}
	
}

Inicio.java

import java.sql.*;
import java.text.DecimalFormat;
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*; 
import javax.servlet.*; 
import javax.servlet.http.*; 

import net.sf.jasperreports.engine.*;
import net.sf.jasperreports.engine.data.JRBeanArrayDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import net.sf.jasperreports.engine.export.JRHtmlExporter;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map; 
import java.util.HashMap; 

import java.sql.*; 

public class rInicio extends HttpServlet
{ 
 boolean status ;
 ResultSet rs ;
 String desc, rotulo;
 
 public void doGet (HttpServletRequest req , HttpServletResponse res)
        throws IOException, ServletException
 { 	 	

//	 Caminho do .jasper
	 
		//String caminhoRelJasper = "Livros.jasper";
	 
	   ServletContext context = getServletContext();   
	   byte[] bytes = null;   
	    JasperReport relatorioJasper= null ;
	    try {
			relatorioJasper = (JasperReport)JRLoader.loadObject(context.getRealPath("/WEB-INF/Livros.jasper"));
		} catch (JRException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} 

		// Lista com beans
		List listaLivros = getLivros();

		// Stream com o .jasper
		
		//InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);
		  

		// O datasource
		JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(listaLivros);

		// Parametros do relatorios
		Map parametros = new HashMap();
		
		try {
			bytes = JasperRunManager.runReportToPdf(relatorioJasper,parametros,ds);
		} catch (JRException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}   
	    

		//JasperPrint impressao = null;
		try {

			//impressao = JasperFillManager.fillReport(relJasper, parametros, ds);
			//JasperViewer viewer = new JasperViewer(impressao, true);
			//viewer.setVisible(true);
			
//			 envia o relatório em formato PDF para o browser   
		      res.setContentType("application/pdf");
		      
		      res.setContentLength(bytes.length);   
		      ServletOutputStream ouputStream = res.getOutputStream();   
		      ouputStream.write(bytes, 0, bytes.length);   
		      ouputStream.flush();   
		      ouputStream.close(); 

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	 	
	 

 } 

	public List getLivros() {
		List listaLivros = new ArrayList();
		Livro livro = new Livro();

		livro.setTitulo("Use a cabeça! Padrões de Projeto - Design Patterns");
		livro.setAutor("Freeman, Eric / Freeman, Elisabeth");
		livro.setIsbn("[telefone removido]");
		livro.setEditora("Alta Books");
		livro.setDescricao("Como você sabe que não quer reinventar a roda (ou, "
						+ "pior, um pneu furado), "
						+ "então você busca padrões de projetos");
		listaLivros.add(livro);

		livro = new Livro();
		livro.setTitulo("Entendendo e Dominando o Linux");
		livro.setAutor("Morimoto, Carlos");
		livro.setIsbn("[telefone removido]");
		livro.setEditora("Digerati");
		livro.setDescricao("Como o nome diz, este livro é uma obra destinada a "
						+ "todos aqueles que "
						+ "pretendem conhecer na prática e em detalhes os "
						+ "principais recursos oferecidos pelo Linux");
		listaLivros.add(livro);

		livro = new Livro();
		livro.setTitulo("Guia de Certificação em Java - Exame CX-310-035");
		livro.setAutor("Pereira, Rafael");
		livro.setIsbn("[telefone removido]");
		livro.setEditora("Ciência Moderna");
		livro.setDescricao("Este Guia de Certificação em Java é um livro "
				+ "fundamental para preparar os"
				+ " candidatos ao exame de programador Java da Sun, "
				+ "a primeira e mais "
				+ "requisitada certificação desta tecnologia.");
		listaLivros.add(livro);

		return listaLivros;
	}
 
}

O erro é o seguinte:

java.lang.NullPointerException
	net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:138)
	net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:83)
	net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
	net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:419)
	rInicio.doGet(rInicio.java:103)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.catalina.servlets.InvokerServlet.serveRequest(InvokerServlet.java:419)
	org.apache.catalina.servlets.InvokerServlet.doGet(InvokerServlet.java:133)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:689)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

O que pode ser?

4 Respostas

P

Será que está faltando algum jar que acontece o erro na mensagem acima?

P

Ninguém?!

M
Paezani:
net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:138 )

Bem, esse é o trecho de código do método createFiller da classe JRFiller(http://www.koders.com/java/fid6EDEBEC80569D070231C94D30766374AB0B2E6D2.aspx):

public static JRBaseFiller createFiller(JasperReport jasperReport) throws JRException
	{
		JRBaseFiller filler = null;

		switch (jasperReport.getPrintOrder()) //<- Linha 138 bem aqui. 
		{
			case JRReport.PRINT_ORDER_HORIZONTAL :
			{
				filler = new JRHorizontalFiller(jasperReport);
				break;
			}
			case JRReport.PRINT_ORDER_VERTICAL :
			{
				filler = new JRVerticalFiller(jasperReport);
				break;
			}
		}
		return filler;
	}
}
Já que o NullPointerException acontece ao acessar jasperReport.getPrintOrder(), veja se...
relatorioJasper = (JasperReport)JRLoader.loadObject(context.getRealPath("/WEB-INF/Livros.jasper"));
... realmente seta o valor correto em relatorioJasper.

[]'s
JL

P

O nome e o caminho do arquivo jasper estavam certos… apenas compilei o Arquivo jrxml no ireport 3.0.5 e deu certo! Eu estava usando o arquivo que baixei junto com o código que eu adaptei para servlet. Talvez o problema era com algum jar de versão diferenteda usada no arquivo que baixei.

Mas muito Obrigado Mero_Aprendiz pela dica

[]s

Criado 27 de julho de 2009
Ultima resposta 29 de jul. de 2009
Respostas 4
Participantes 2