Erro ao tentar criar Report (Jasper) - [ajuda]

8 respostas
rollei

Estou tendo problemas para criar o relatorio, alguem por favor me ajuda :~

vou passar os codigos:

Relatorio.java
package br.eti.furutani;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;

public class Relatorio extends HttpServlet {

	private static final long serialVersionUID = 3343503743483511583L;
	
	public static Connection con;
	public static String banco = "sra"; // Nome do banco de dados
	public static String usuario = "root"; // Usuario do banco
	public static String senha = "senha"; // Senha

	@SuppressWarnings("unchecked")
	protected void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		conexao(); // Faz a conexão
		
		// Na variavel pathJasper ficara o caminho do diretório para os relatórios compilados (.jasper)
		String pathJasper = getServletContext().getRealPath(
				"/WEB-INF/classes/br/eti/furutani/")
				+ "\\";
				
		// A variavel path armazena o caminho real para o contexto
		// isso é util pois o seu web container pode estar instalado em lugares diferentes
		String path = getServletContext().getRealPath("\\");
		
		// Parametros do relatorio
		Map parametros = new HashMap();
		// O único parametro que devemos passar é o PathRelAutores
		// é o caminho pro RelAutores.jasper
		parametros.put("PathRelPendencias", pathJasper + "RelPendencias.jasper");
		
		try {
			// Aqui ele cria o relatório
			JasperPrint impressao = JasperFillManager.fillReport(pathJasper
					+ "RelPendencias.jasper", parametros, con);

			// Grava o relatório em disco em pdf	
			JasperManager.printReportToPdfFile(impressao, path
					+ "/RelatorioPendencias.pdf");
						
			// Redireciona para o pdf gerado
			res.sendRedirect("RelatorioPendencias.pdf");

		} catch (Exception e) {
			res.getWriter().println("Erro ao gerar o relatorio: " + e);
		}
	}
	// Cria a conexão
	public void conexao() {
		try {
			if (con == null || con.isClosed()) {
				Class.forName("com.mysql.jdbc.Driver");
				con = DriverManager.getConnection(
						"jdbc:mysql://localhost:3306/" + banco, usuario, senha);
			}
		} catch (Exception e) {
			System.out.println("não foi possível conectar ao banco ->");
			e.printStackTrace();
		}
	}

	protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		doPost(arg0, arg1);
	}

}

o RelPendencias.jasper ta dentro do mesmo pacote dessa classe, alguem pode me dar uma ajuda?

[]'s

8 Respostas

julianoeustaquio

Qual é o problema que você está tendo???

felipedamiani

Posta o erro que está te retornando, assim fica mais fácil de ver onde está o erro! :slight_smile:

rollei

esqueci :lol:

net.sf.jasperreports.engine.JRException: Error loading object from file : C:\eclipse\workspace\exemplo\web\WEB-INF\classes\br\eti\furutani\RelPendencias.jasper

felipedamiani

dá uma olhada neste tópico e veja se te ajuda:

http://www.guj.com.br/posts/list/15989.java

a propósito, o já visse se o .jasper está no diretório que você está especificando?

rollei

sim cara eu coloquei o relatorio jasper dentro do pacote do src quando ele compila o relatorio.jasper ta indo pro caminho especificado eu jah chequei :~

rollei
Erro ao gerar o relatorio: net.sf.jasperreports.engine.JRException: Error loading object from file : C:\eclipse\workspace\exemplo\web\WEB-INF\classes\br\eti\furutani\RelPendencias.jasper
rollei

cara vlw pela ajuda, consegui descobrir o erro, era que a versao dos .jars que tavam no projeto e no ireports era diferentes, agora estou tento outro erro ... espero que possam me ajuda de novo :)

Relatorio.java
package br.eti.furutani;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperManager;
import net.sf.jasperreports.engine.JasperPrint;

public class Relatorio extends HttpServlet {

	private static final long serialVersionUID = 3343503743483511583L;
	
	public static Connection con;
	public static String banco = "sra"; // Nome do banco de dados
	public static String usuario = "root"; // Usuario do banco
	public static String senha = "senha"; // Senha

	protected void doPost(HttpServletRequest req, HttpServletResponse res)
			throws ServletException, IOException {
		conexao(); // Faz a conexão
		
		// Na variavel pathJasper ficara o caminho do diretório para os relatórios compilados (.jasper)
		String pathJasper = getServletContext().getRealPath(
				"/WEB-INF/classes/br/eti/furutani/")
				+ "/";
				
		// A variavel path armazena o caminho real para o contexto
		// isso é util pois o seu web container pode estar instalado em lugares diferentes
		String path = getServletContext().getRealPath("/");
		
		// Parametros do relatorio
		Map parametros = new HashMap();
		// O único parametro que devemos passar é o PathRelAutores
		// é o caminho pro RelAutores.jasper (que foi subtituido pelo 
		// valor fixo ?D:/iReport-0.4.0/RelAutores.jasper?)
		//parametros.put("PathRelatorioPendencias", pathJasper + "RelatorioPendencias.jasper");
		
		try {
			// Aqui ele cria o relatório
			JasperPrint impressao = JasperFillManager.fillReport(pathJasper + 
					"RelatorioPendencias.jasper", parametros, con);

			// Grava o relatório em disco em pdf	
			JasperManager.printReportToPdfFile(impressao, path
					+ "/RelatorioPendencias.pdf");
						
			// Redireciona para o pdf gerado
			res.sendRedirect("RelatorioPendencias.pdf");

		} catch (Exception e) {
			res.getWriter().println("Erro ao gerar o relatorio: " + e);
		}
	}
	// Cria a conexão
	public void conexao() {
		try {
			if (con == null || con.isClosed()) {
				Class.forName("com.mysql.jdbc.Driver");
				con = DriverManager.getConnection(
						"jdbc:mysql://localhost:3306/" + banco, usuario, senha);
				System.out.println("conexão efetuada com sucesso ->");
			}
		} catch (Exception e) {
			System.out.println("não foi possível conectar ao banco ->");
			e.printStackTrace();
		}
	}

	protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
			throws ServletException, IOException {
		doPost(arg0, arg1);
	}

}
import net.sf.jasperreports.engine.JasperManager; JasperManager.printReportToPdfFile(impressao, path + "/RelatorioPendencias.pdf");
essas duas linhas no Relatorio.java estao apontadas no eclipse como deprecated (warning), o que devo usar no lugar? Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
									http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <display-name>Exemplo Relatorios com JasperReports</display-name>
  
  
  <servlet>
    <servlet-name>RelatorioServlet</servlet-name>
    <servlet-class>br.eti.furutani.Relatorio</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>RelatorioServlet</servlet-name>
    <url-pattern>/RelPendencias</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
</web-app>

erro

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: com/lowagie/text/pdf/FontMapper
net.sf.jasperreports.engine.JasperExportManager.exportReportToPdfFile(JasperExportManager.java:121)
net.sf.jasperreports.engine.JasperManager.printReportToPdfFile(JasperManager.java:306)
br.eti.furutani.Relatorio.doPost(Relatorio.java:53)
br.eti.furutani.Relatorio.doGet(Relatorio.java:80)
javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)

note The full stack trace of the root cause is available in the Apache Tomcat/5.5.23 logs.
Apache Tomcat/5.5.23

alguem tem ideia do que seja? estou com os seguintes jars no lib do projeto:
commons-collections-2.1
commons-logging-1.0.2
commons-logging-api-1.0.2
iReport
jasperreports-2.0.4
mysql-connector-java-3.1.11-bin

aparentemente o erro esta exatamente na linha que esta dando warning (depracated):

JasperManager.printReportToPdfFile(impressao, path
+ "/RelatorioPendencias.pdf");

rollei

consegui resolver o meu problema 8) 8)

se alguem receber essa mensagem de erro:

“java.lang.NoClassDefFoundError: com/lowagie/text/pdf/FontMapper”

no tomcat, a solucao eh colocar o .jar “itext-1.3.1” dentro do lib do projeto ou referenciar … engracado que nao acusa nenhuma dependencia no eclipse :confused:

fica ae a dica para quem tiver esse problema

edit:
sim … no caso do warning a lib e o comando que ta em uso hoje sao:

import net.sf.jasperreports.engine.JasperExportManager;

JasperExportManager.exportReportToPdfFile(impressao,

path + /RelatorioPendencias.pdf);
Criado 4 de março de 2008
Ultima resposta 5 de mar. de 2008
Respostas 8
Participantes 3