Problemas com Jasper Report

4 respostas
Eduardo_Bregaida

Bom pessoal to com problemas na minha servlet, coloquei as Libs, gerei o .jasper no IReport, mas ta dando pau na hora de abrir…

Erro:

17:18:21,111 ERROR [RelatorioRMServlet]:145 - Allocate exception for servlet RelatorioRMServlet java.lang.NoClassDefFoundError: net/sf/jasperreports/engine/JasperPrint at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Unknown Source) at java.lang.Class.getConstructor0(Unknown Source) at java.lang.Class.newInstance0(Unknown Source) at java.lang.Class.newInstance(Unknown Source) at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1089) at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:791) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:127) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874) at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) at java.lang.Thread.run(Unknown Source)

O código está abaixo:

/**
 *
 */
package br.com.xxx.relatorio.rmrelatorio;
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 RelatorioRM extends HttpServlet {
	
	private static final long serialVersionUID = 1L;
	public static Connection con;
	public static String banco = "projeto"; // Nome do banco de dados
	public static String usuario = "root"; // Usuario do banco
	public static String senha = "root"; // 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(
	"/src/br/com/xxx/relatorio/rmrelatorio")
	+ "/";
//	 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();

	try {
//	 Aqui ele cria o relatório
	JasperPrint impressao = JasperFillManager.fillReport(pathJasper
	+ "CadastroDeRMS.jasper", parametros, con);
//	 Grava o relatório em disco em pdf
	JasperManager.printReportToPdfFile(impressao, pathJasper
	+ "/CadastroDeRMS.pdf");
//	 Redireciona para o pdf gerado
	res.sendRedirect("CadastroDeRMS.pdf");
	} catch (Exception e) {
	res.getWriter().println("Erro ao gerar o relatório: " + 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 -&gt");
	e.printStackTrace();
	}
	}
	protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1)
	throws ServletException, IOException {
	doPost(arg0, arg1);
	}
	}

4 Respostas

D

Cara… NoClassDefFoundError quase sempre é pq tá faltando jar na aplicação. Verifica se tem o jasperreports-X.X.jar no /WEB-INF/lib da sua aplicação ou se o mesmo não está corrompido (tenta abrir com um programa de zip e veja se ele descompacta sem dar erros).

Espero ter ajudado. Até.

Eduardo_Bregaida

dmarcosm:
Cara… NoClassDefFoundError quase sempre é pq tá faltando jar na aplicação. Verifica se tem o jasperreports-X.X.jar no /WEB-INF/lib da sua aplicação ou se o mesmo não está corrompido (tenta abrir com um programa de zip e veja se ele descompacta sem dar erros).

Espero ter ajudado. Até.

Nao era isso nao é alguma coisa no codigo ou no Web XML

<!-- Relatorio Servlet Mapping --> <servlet> <servlet-name>RelatorioRMServlet</servlet-name> <servlet-class>br.com.xxx.sgv.relatorio.rmrelatorio.RelatorioRM</servlet-class> </servlet> <servlet-mapping> <servlet-name>RelatorioRMServlet</servlet-name> <url-pattern>/CadastroDeRMS.pdf</url-pattern> </servlet-mapping>

:smiley:

Eduardo_Bregaida

Mudei o codigo mas o erro persiste... alguem aí q já fez poderia me dizer se meu Web.xml ta certo?

Java:
/**
 *
 */
package br.com.xxx.sgv.relatorio.rmrelatorio;

import java.io.IOException;
import java.sql.Connection;
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 org.hibernate.Session;

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


import br.com.xxx.sgv.hibernate.hibernateutil.HibernateUtil;

/**
 * @author Eduardo Bregaida
 *
 */

public class RelatorioRM extends HttpServlet {


	private static final long serialVersionUID = 1L;
	/**
	 *
	 */

	Session session = HibernateUtil.openSession();
	Connection con = (Connection) session.connection();

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

protected void doPost(HttpServletRequest req, HttpServletResponse res)
	throws ServletException, IOException {

	// Na variavel pathJasper ficara o caminho do diretório para
	// os relatórios compilados (.jasper)
	String pathJasper = getServletContext().getRealPath(
			"/WEB-INF/classes/br/com/xxx/sgv/relatorio/rmrelatorio")
			+ "/";

	// 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("/");
	Map parametros = new HashMap();
	//parametros.put("",pathJasper + "CadastroDeRMS.jasper");

	try {
		// Aqui ele cria o relatório
		JasperPrint impressao = JasperFillManager.fillReport(pathJasper
			+ "CadastroDeRMS.jasper", parametros, con);

		// Grava o relatório em disco em pdf
		JasperManager.printReportToPdfFile(impressao, path
			+ "/CadastroDeRMS.pdf");

		// Redireciona para o pdf gerado
		res.sendRedirect("CadastroDeRMS.pdf");
	} catch (Exception e) {
		res.getWriter().println("Erro ao gerar o relatório: " + e);
	}
}
}
WebXML:
<!-- Relatorio Servlet Mapping -->
	<servlet>
		<servlet-name>RelatorioRMServlet</servlet-name>
		<servlet-class>
			br.com.xxx.sgv.relatorio.rmrelatorio.RelatorioRM
			</servlet-class>
       </servlet>
	
	<servlet-mapping>
		<servlet-name>RelatorioRMServlet</servlet-name>
		<url-pattern>/CadastroDeRMS.pdf</url-pattern>
	</servlet-mapping>

Vlw :D

sergiolopes

entao, seu web.xml ta certo porque o tomcat esta tentando abrir sua servlet. o que a dando pau eh na hora q o tomcat tenta dar new, e é uma classnotfoundexception.

GRANDES chances de q esta faltando jar ou esta com versao errada, algo do tipo.

Criado 18 de setembro de 2007
Ultima resposta 19 de set. de 2007
Respostas 4
Participantes 3