Problemas com JasperReport e lista de beans

10 respostas
S

Bom dia.
Estou enfrentando alguns problemas para criar relatórios com o JasperReport. Estou utilizando uma fonte de dados que é uma lista de beans.

Abaixo segue o código que estou usando:

public class Impressao {
    
    public void imprime(List lista) {
       
        try {
            Map parametros = new HashMap();
            parametros.put("pathSubRel","teste");            

            URL url = this.getClass().getResource("/relato1.jasper");
            
            JRDataSource jrds = new JRBeanArrayDataSource( lista.toArray() );
            
            JasperReport relatorio = JasperManager.loadReport( url.getPath() );
            
            //a partir deste ponto a rotina estoura
            JasperPrint impressao = JasperManager.fillReport( relatorio, parametros, jrds );

        } catch (JRException e) {
            Mensagem.showMessage("Erro ao visualizar o relatório!\n" + e.getMessage());            
        }
    }
    
}

Agradeço qualquer tipo de ajuda.[/code]

10 Respostas

A

Que erro que ta dando??
Posta aê!!!

S

O erro que aparece é o seguinte:

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: org/apache/commons/digester/Digester

org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)

org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)

org.apache.jsp.jsp.teste_jsp._jspService(teste_jsp.java:90)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester

net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:239)

twins.impressao.jasper.ServicoImpressaoTexto.getJasperReportImpressao(ServicoImpressaoTexto.java:31)

twins.impressao.jasper.ServicoImpressaoTexto.gerarConteudo(ServicoImpressaoTexto.java:44)

twins.impressao.jasper.ServicoImpressaoTexto.gerarPDF(ServicoImpressaoTexto.java:180)

org.apache.jsp.jsp.teste_jsp._jspService(teste_jsp.java:74)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)

org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)

javax.servlet.http.HttpServlet.service(HttpServlet.java:802)

org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)

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


Apache Tomcat/5.0.28

E

eae cara blz?

bom pelo erro que eu vi ai no seu log

verifica os codigos:

twins.impressao.jasper.ServicoImpressaoTexto.getJasperReportImpressao(ServicoImpressaoTexto.java:31)
twins.impressao.jasper.ServicoImpressaoTexto.gerarConteudo(ServicoImpressaoTexto.java:44)
twins.impressao.jasper.ServicoImpressaoTexto.gerarPDF(ServicoImpressaoTexto.java:180)

nas linhas indicadas

ps.: essas classes são suas?(codificadas por vc ) provavelmente é na primeira referencia de cima para baixo que vc deve verificar se todas as
informações necessárias estão sendo enviadas ou tratadas :wink:

[]´s

S

Olá Erko, eu acabei mandando o erro errado :???: acabei mandando o erro de um teste que fiz, utilizando uma classe que peguei no forum…

O erro real que acontece é este:

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
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


root cause 

java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
	net.sf.jasperreports.engine.fill.JRBaseFiller.<clinit>(JRBaseFiller.java:128)
	net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:151)
	net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:472)
	Relatorio.Consumo.Toras.Turno.Impressao.imprime(Impressao.java:59)
	twins.impressao.jasper.TesteImp.service(TesteImp.java:57)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


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


--------------------------------------------------------------------------------

Apache Tomcat/5.0.28

E o código completo que estou utilizando é esse:

public class Impressao {
    
    private static final String rel1 = "/relato1.jasper";

    public void imprime(List lista) {
       
        try {
            Map parametros = new HashMap();
            parametros.put("data","01/01/2005");            
            parametros.put("totalKgTurnoA","100");            
            
            JRDataSource jrds = new JRBeanArrayDataSource( lista.toArray() );

            URL url = this.getClass().getResource("/relato1.jasper");  
                        
            JasperReport jr = JasperManager.loadReport( url.getPath() );
            
            JasperPrint impressao = JasperFillManager.fillReport( jr, parametros, jrds );  //aqui estoura
            
            JasperViewer viewer = new JasperViewer(impressao, true);   
            
            viewer.show();                        
        } catch (JRException e) {
            Mensagem.showMessage("Erro ao visualizar o relatório!\n" + e.getMessage());            
        }
    }
    
}

Como tu pode ver é no método do fillReport que estoura a aplicação.

O que pode ser?

E

bom pode ser 2 coisas:

na execução desse codigo ele não estar conseguindo
enviar para o jasper

ou não estar achando alguma jar necessario…

bom tem como vc mandar o erro que aparece no console do tomcat???

as vezes fica mais facil de achar se vc relacionar o erro que aparece no
browser com o erro que aparece no console, q as vezes são um pouco diferentes…

vlws

[]´s

S

O retorno do debugger console:

Attaching to tomcat_shared_memory_id
User program running
Breakpoint hit at line 51 in class twins.impressao.jasper.TesteImp by thread http-8084-Processor23.
Thread http-8084-Processor23 stopped at TesteImp.java:51.
User program running
Thread http-8084-Processor23 stopped at TesteImp.java:52.
User program running
Thread http-8084-Processor23 stopped at TesteImp.java:54.
User program running
Thread http-8084-Processor23 stopped at TesteImp.java:56.
User program running
Thread http-8084-Processor23 stopped at TesteImp.java:57.
User program running
Breakpoint hit at line 49 in class Relatorio.Consumo.Toras.Turno.Impressao by thread http-8084-Processor23.
Thread http-8084-Processor23 stopped at Impressao.java:49.
User program running
Thread http-8084-Processor23 stopped at Impressao.java:50.
User program running
Thread http-8084-Processor23 stopped at Impressao.java:51.
User program running
Thread http-8084-Processor23 stopped at Impressao.java:53.
User program running
Thread http-8084-Processor23 stopped at Impressao.java:55.
User program running
Thread http-8084-Processor23 stopped at Impressao.java:57.
User program running
Thread http-8084-Processor23 stopped at Impressao.java:59.
User program running
User program finished
C

Opa. Porque vc nao faz um teste pra ver se esse codigo roda em Desktop pra ver se o erro eh no codigo mesmo?? eu quando mexo com jasperReports costumo fazer tudo antes como se fosse application pra soh depois testar no Tomcat… qualquer coisa posta ai q ja tive varios bugs talvez possa ajudar.

S

Olá carninhu, amanhã, quando chegar ao trabalho, vou tentar fazer o teste em desktop. Mas eu acredito que o erro não seja esse.

Baixei a última versão do jasperreport e nos exemplos dele acontece a mesma coisa.

Pensei que poderia ser algum problema de configuração do classpath, pois a mensagem diz que não localiza algum arquivo. Amanhã eu vou postar a mensagem que ele exibe, no exemplo do jasper.

Para nível de curiosidade, como tu definiu a configuração teu sistema?

E

hum blz

cara uma pergunta vc tah usando o eclipse???

por um acaso vc está executando tomcat pelo eclipse???

pergunto por causa dessa linha que tu postou:

Breakpoint hit at line 51 in class twins.impressao.jasper.TesteImp by thread http-8084-Processor23.

essa semana aconteceu deu uma aplicação no pc de uma colega
do trabalho não estar funcionando e penamo pra descobrir
oq era ateh que a reposta apontou para um break point marcado em uma classe que era executada pelo tomcat e simplesmente a montagem da pagina gerava um erro similar ao que vc postou inicialmente…

verifica se na tua classe perdida naum tem nenhum breakpoint marcado

tente executar o tomcat sem ser pelo eclipse e mande executar essa mesma classe e verifique se gera esse mesmo erro

ps.: hipotese para estar executando o tomcat pelo eclipse com uma classe que é executada pela pagina a qual possui um breakpoint perdido
na classe
caso vc naum esteje utilizando eclipse como IDE e inicializando o tomcat por ele desconsiderar este post

isso q comentei foi embasado em algo que descrevi no post que realmente ocorreu essa semana!!! 8O

[]'s

S

Ola Erko.

Eu utilizo o NetBeans 4 e estou rodando a aplicação por ele mesmo. Mas mesmo rodando direto pelo tomcat o erro acontece.

Como falei anteriormente, eu baixei uma versão mais atual do JASPERREPORT, e fui executar um exemplo dele e os erros persistem.

Então o problema é realmente alguma configuração na minha máquina…

Abaixo segue o erro:

JasperReports encountered this error : 
java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
	at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:125)
	at org.apache.jsp.jsp.compile_jsp._jspService(compile_jsp.java:61)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)

E este é o código da JSP:

JasperReports encountered this error : 
java.lang.NoClassDefFoundError: org/apache/commons/digester/Digester
	at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:125)
	at org.apache.jsp.jsp.compile_jsp._jspService(compile_jsp.java:61)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
	at java.lang.Thread.run(Thread.java:534)
Criado 23 de maio de 2005
Ultima resposta 25 de mai. de 2005
Respostas 10
Participantes 4