Problemas com o Jasper Report

11 respostas
R

Eai rapaziada do fórum… Espero que vocês me ajudem…

Estou com um problema muito estranho no Jasper… estou usando a versão nova dele a 4.1…

ao fazer a chamada do method:
JasperFillManager.fillReportToFile(caminho, parameters);

eu recebo um baita erro… na variável “caminho” ta o caminho apartir da raiz “c:…\Relatorio.jasper” eu ja usei o jasper mais nunca me deparei com esse tipo de situação.
aqui o erro:

[color=red]Exception in thread main java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory

at net.sf.jasperreports.engine.util.JRLoader.(JRLoader.java:60)

at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:119)

at testereport.TesteReport.geraRelatorio(TesteReport.java:43)

at testereport.TesteReport.main(TesteReport.java:28)

Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory

at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

 4 more

Java Result: 1[/color]

também acontece erro ao fazer essas chamadas:

jasperPrint = JasperFillManager.fillReport(caminho, parametros);

a variavel jasperPrint vem nula mais não tem erro nem um ate ai.

mais se eu chamo:

JasperExportManager.exportReportToPdfStream(jasperPrint, outputStream);

ou

JasperExportManager.exportReportToPdf(jasperPrint);

acontece erro de nullpointer;

se alguém tiver um mini tutorial bacana pra passa me avisem…

desde já agradeço…

11 Respostas

J

Raphael Silva, por um acaso vc adicionou a biblioteca commons-logging ao seu projeto ?

L

Raphael,

acho que é assim:

JasperPrint jp = JasperFillManager.fillReport(caminho, parametros);

Mas num post de hoje, tive vários problemas de exceções de memória das classes Jasper. O relatório é exibido em PDF uma única vez, depois vinham as exceções “Relatório não pôde ser exportado…”. Procurei bastante e o negócio é meio tenebroso, mesmo em fóruns de outras línguas a galera ainda tá meio perdida.

Se alguém tiver um código que funcione, poderia postar aí.

inté.

J

Então vc quer somente exportar pra .pdf? e isso? Posta seu código todo aki…

Cara tenta algo do tipo:

public class Relatorio {
	public static void main(String[] args) throws JRException {
		JREmptyDataSource dataSource = new JREmptyDataSource();
		JasperPrint print = JasperFillManager.fillReport(Relatorio.class.getResourceAsStream("./report.jasper"), null, dataSource);
		JasperExportManager.exportReportToPdfFile(print, "report.pdf");
	}
}
L

JWeibe,

a chamada Relatorio.class.getResourceAsStream("./report.jasper") tá vindo null, só que o arquivo existe e está lá, já confirmei.

Alguém tem uma ideia?

J

Seguinte… eu fiz este teste aki na minha máquina e foi de boa, exportou pra .pdf.
Posta seu código completo aki, e como esta a estrutura do seu projeto.

L

O código tá assim:

@Override
  protected void service(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
  {
    Connection con = null;
    String arquivo = request.getParameter("nomeReport") != null ? request.getParameter("nomeReport") : "?";
    
    if ( !arquivo.equals("?") )
    {
      String camhinho_fisico = request.getServletContext().getRealPath("db.properties");
      String s = DbUtils.getPropriedade(camhinho_fisico, "caminho_fisico_relatorios");
      arquivo = s + "/" + arquivo + ".jasper";
    }
    
    HashMap<String, String> parameterMap = new HashMap<String, String>();
    parameterMap.put("pSTATUS_USUARIO", "A");
    
    try 
    {
      con = FabricaConexao.getConnection("jdbc:mysql://localhost/banco", "user", "passwd");
      
      JasperPrint print = JasperFillManager.fillReport( ServletRpt.class.getResourceAsStream(arquivo), parameterMap, con);   
      JasperExportManager.exportReportToPdfFile(print, "report.pdf");        
      
      response.sendRedirect("menuPrincipal.faces");
      
      con.close();
    } 
    catch (JRException e)        
    {
      e.printStackTrace();
    }
...
..
.
R
jweibe:
Seguinte.. eu fiz este teste aki na minha máquina e foi de boa, exportou pra .pdf. Posta seu código completo aki, e como esta a estrutura do seu projeto.

Eu coloquei a biblioteca commons... so que ta dando o mesmo problema... eu to tentando fazer um teste simples:

package testereport;

import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.view.JasperViewer;

public class TesteReport {

    public static void main(String[] args) throws JRException, Exception {
        new TesteReport().geraRelatorio();
    }

    public void geraRelatorio() throws JRException, Exception {
        Map parameters = new HashMap();

        InputStream input = TesteReport.class.getResourceAsStream(&quot;./Relatorio.jasper&quot;);
        JasperPrint print = JasperFillManager.fillReport(input, parameters);
        JasperViewer.viewReport(print);
    }
}

minha estrutura:
src->testereport.TesteReport.java
src->testereport.Report.jasper

R
Aqui a pilha de erro:

Exception in thread main java.lang.NoClassDefFoundError: org/apache/commons/collections/ReferenceMap

at net.sf.jasperreports.extensions.DefaultExtensionsRegistry.(DefaultExtensionsRegistry.java:96)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)

at java.lang.reflect.Constructor.newInstance(Constructor.java:513)

at java.lang.Class.newInstance0(Class.java:355)

at java.lang.Class.newInstance(Class.java:308)

at net.sf.jasperreports.engine.util.ClassUtils.instantiateClass(ClassUtils.java:59)

at net.sf.jasperreports.extensions.ExtensionsEnvironment.createDefaultRegistry(ExtensionsEnvironment.java:80)

at net.sf.jasperreports.extensions.ExtensionsEnvironment.(ExtensionsEnvironment.java:68)

at net.sf.jasperreports.engine.util.JRStyledTextParser.(JRStyledTextParser.java:81)

at net.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:182)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:77)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:87)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:57)

at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:142)

at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:114)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:435)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:398)

at testereport.TesteReport.geraRelatorio(TesteReport.java:21)

at testereport.TesteReport.main(TesteReport.java:14)

Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.ReferenceMap

at java.net.URLClassLoader$1.run(URLClassLoader.java:202)

at java.security.AccessController.doPrivileged(Native Method)

at java.net.URLClassLoader.findClass(URLClassLoader.java:190)

at java.lang.ClassLoader.loadClass(ClassLoader.java:307)

at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)

at java.lang.ClassLoader.loadClass(ClassLoader.java:248)

 21 more

Java Result: 1

é uma coisa muito simples. eu tinha as classes funcionando muito bem nas versões mais antigas mais agora nada da certo não creio que devo retroceder para as versões abaixo de 3.0… Ta meio estranho…

J

Cara vou postar o exemplo que eu fiz aki.

Classe:

import net.sf.jasperreports.engine.JREmptyDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;


public class Relatorio {
	public static void main(String[] args) throws JRException {
		JREmptyDataSource dataSource = new JREmptyDataSource();
		JasperPrint print = JasperFillManager.fillReport(Relatorio.class.getResourceAsStream("./report.jasper"), null, dataSource);
		JasperExportManager.exportReportToPdfFile(print, "report.pdf");
	}
}

Imagem do Projeto e Jar:


R

jweibe valeu por posta seu codigo…
Mais eu acho que são os jar… deve ta faltando algum jar pra rodar correto… peguei a versão antiga do Jasper, a 3.0.0, de um projeto antigo, comecei a filtra os jar da app…
os mesmo method s funcionam de boa…

Agora resta descobri guais jar a nova versão do Jasper, a 4.0.1, utiliza…

se alguem souber ou tiver um link pra baixa-las…

Valeu galera…

R

Pessoal vlw ai…
consegui resolver o problema dos jar… era o download que fiz errado…

vlw…

Criado 11 de abril de 2011
Ultima resposta 12 de abr. de 2011
Respostas 11
Participantes 3