Tentando Gerar Relatorio

14 respostas
evertonsilvagomesjav

Bom dia pessoal!

Eu estou tentando gerar um Relatorio no Jasper, porém nao to conseguindo.

Esta me dando o seguinte erro no stack trace

log4j:WARN No appenders could be found for logger (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory). log4j:WARN Please initialize the log4j system properly. net.sf.jasperreports.engine.JRException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:249) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:228) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:216) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:170) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:154) at Relatorio.Relatorio.gerar(Relatorio.java:27) at Relatorio.Relatorio.main(Relatorio.java:59) Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source) at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1647) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:241) ... 6 more

Alguém ai sabe o que é, e pode me ajudar?

Valeu!!!

14 Respostas

juliocesarss

Esta faltando bibliotecas…

Ja importou todas?

evertonsilvagomesjav

Pois é, eu baixei o Jasper e pra add os .jars eu fui no seguinte caminho:

C:\Arquivos de programas\Jaspersoft\iReport-3.7.5\ireport\modules

E fui adicionei os jars que estavam la dentro, que são:

com-jaspersoft-ireport.jar
com-jaspersoft-ireport-addons.jar
com-jaspersoft-ireport-components.jar
com-jaspersoft-ireport-designer-standalone.jar
com-jaspersoft-ireport-heartbeat.jar
com-jaspersoft-ireport-jasperserver.jar
com-jaspersoft-ireport-samples.jar
com-jaspersoft-jrx.jar

juliocesarss

Olha:

Essas são as bibliotecas que vc tem que usar:

jasperreports-3.5.2.jar
commons-logging-1.1.1.jar
commons-logging-adapters-1.1.1.jar
commons-logging-api-1.1.1.jar
commons-logging-tests.jar
commons-logging-collections-3.2.jar
commons-logging-digester-2.0-bin.zip
commons-beanutils-1.8.3-bin.zip
commons-digester-1.8.jar

E esses os imports:

import java.util.HashMap;  
 import com.mysql.jdbc.PreparedStatement;  
 import java.sql.ResultSet;  
 import javax.swing.JOptionPane;  
 import net.sf.jasperreports.engine.JRResultSetDataSource;  
 import net.sf.jasperreports.engine.JasperFillManager;  
 import net.sf.jasperreports.engine.JasperPrint;  
 import net.sf.jasperreports.view.JasperViewer;
Ataxexe

Pra mim é problema de encoding. Provavelmente seu relatório tem acentos e não está em UTF-8.

juliocesarss

Provavelmente não… pois os acentos não causam erros.

Se não estiver em UTF-8 ele vai gerar porém as palavras com acentos irão aparecer diferentes.

Mas não acho que esse seja o erro ja que ele postou as bibliotecas que ele esta utilizando e esta faltando algumas.

evertonsilvagomesjav

E onde ficam esses jars?

juliocesarss

Não sei se a suas bibliotecas são iguais as minhas.

Eu baixei um zip, uma pasta jasperreports e dentro dela na pasta lib tem essas bibliotecas, e na pasta dist tem mais algumas.

Ataxexe

juliocesarss:
Provavelmente não… pois os acentos não causam erros.

Se não estiver em UTF-8 ele vai gerar porém as palavras com acentos irão aparecer diferentes.

Mas não acho que esse seja o erro ja que ele postou as bibliotecas que ele esta utilizando e esta faltando algumas.

Podem causar sim. Experimente fazer isso em um xhtml no facelets. Tive muitos problemas com isso já.

De qualquer forma não custa nada ele tentar retirá-los para isso. Não creio ser problema de biblioteca porque o erro acusa explicitamente que existem caracteres inválidos.

evertonsilvagomesjav

Cara, eu procurei na net, e achei falando pra criar esse arquivo aqui, e funcionou, agora sinceramente não sei porque kkk

#### Use two appenders, one to log to console, another to log to a file  
    log4j.rootCategory=info, stdout, R  
      
    #### First appender writes to console  
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
      
    # Pattern to output the caller's file name and line number.  
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F%L) - %m%n  
      
    #### Second appender writes to a file  
    log4j.appender.R=org.apache.log4j.RollingFileAppender  
    log4j.appender.R.File=C:\Programas\import.log  
      
    # Control the maximum log file size  
    log4j.appender.R.MaxFileSize=10000KB   
    # Archive log files (one backup file here)  
    log4j.appender.R.MaxBackupIndex=10  
      
    log4j.appender.R.layout=org.apache.log4j.PatternLayout  
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Se alguem souber pq criar esse arquivo pra funcionar, vou ficar muito grato.

mat_louis

Colega, quando você instala o jasperreport tem uma pasta “LIB” lá consta todas as libs necessárias para o seu relatorio funcionar.

Dica:
Adiciona todas as libs e faz o teste!!

Ataxexe
evertonsilvagomesjava:
Cara, eu procurei na net, e achei falando pra criar esse arquivo aqui, e funcionou, agora sinceramente não sei porque kkk
#### Use two appenders, one to log to console, another to log to a file  
    log4j.rootCategory=info, stdout, R  
      
    #### First appender writes to console  
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
      
    # Pattern to output the caller's file name and line number.  
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F%L) - %m%n  
      
    #### Second appender writes to a file  
    log4j.appender.R=org.apache.log4j.RollingFileAppender  
    log4j.appender.R.File=C:\Programas\import.log  
      
    # Control the maximum log file size  
    log4j.appender.R.MaxFileSize=10000KB   
    # Archive log files (one backup file here)  
    log4j.appender.R.MaxBackupIndex=10  
      
    log4j.appender.R.layout=org.apache.log4j.PatternLayout  
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Se alguem souber pq criar esse arquivo pra funcionar, vou ficar muito grato.

Isso é a configuração do Log4J. Crie um arquivo chamado log4j.properties com esse conteúdo na raíz do seu código-fonte.

Mas isso não tem nada a haver com seu problema, é somente a configuração do log. Eu continuo insistindo para que você avalie se o seu arquivo do relatório está de fato em UTF-8 sem nenhum caractere inválido.

evertonsilvagomesjav
Ataxexe:
evertonsilvagomesjava:
Cara, eu procurei na net, e achei falando pra criar esse arquivo aqui, e funcionou, agora sinceramente não sei porque kkk
#### Use two appenders, one to log to console, another to log to a file  
    log4j.rootCategory=info, stdout, R  
      
    #### First appender writes to console  
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
      
    # Pattern to output the caller's file name and line number.  
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F%L) - %m%n  
      
    #### Second appender writes to a file  
    log4j.appender.R=org.apache.log4j.RollingFileAppender  
    log4j.appender.R.File=C:\Programas\import.log  
      
    # Control the maximum log file size  
    log4j.appender.R.MaxFileSize=10000KB   
    # Archive log files (one backup file here)  
    log4j.appender.R.MaxBackupIndex=10  
      
    log4j.appender.R.layout=org.apache.log4j.PatternLayout  
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Se alguem souber pq criar esse arquivo pra funcionar, vou ficar muito grato.

Isso é a configuração do Log4J. Crie um arquivo chamado log4j.properties com esse conteúdo na raíz do seu código-fonte.

Mas isso não tem nada a haver com seu problema, é somente a configuração do log. Eu continuo insistindo para que você avalie se o seu arquivo do relatório está de fato em UTF-8 sem nenhum caractere inválido.

Mas pq entao que ao criar esse arquivo funcionou normal? E que configuraçao e essa do Log4J pode me explicar?

Ataxexe
evertonsilvagomesjava:
Ataxexe:
evertonsilvagomesjava:
Cara, eu procurei na net, e achei falando pra criar esse arquivo aqui, e funcionou, agora sinceramente não sei porque kkk
#### Use two appenders, one to log to console, another to log to a file  
    log4j.rootCategory=info, stdout, R  
      
    #### First appender writes to console  
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
      
    # Pattern to output the caller's file name and line number.  
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F%L) - %m%n  
      
    #### Second appender writes to a file  
    log4j.appender.R=org.apache.log4j.RollingFileAppender  
    log4j.appender.R.File=C:\Programas\import.log  
      
    # Control the maximum log file size  
    log4j.appender.R.MaxFileSize=10000KB   
    # Archive log files (one backup file here)  
    log4j.appender.R.MaxBackupIndex=10  
      
    log4j.appender.R.layout=org.apache.log4j.PatternLayout  
    log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

Se alguem souber pq criar esse arquivo pra funcionar, vou ficar muito grato.

Isso é a configuração do Log4J. Crie um arquivo chamado log4j.properties com esse conteúdo na raíz do seu código-fonte.

Mas isso não tem nada a haver com seu problema, é somente a configuração do log. Eu continuo insistindo para que você avalie se o seu arquivo do relatório está de fato em UTF-8 sem nenhum caractere inválido.

Mas pq entao que ao criar esse arquivo funcionou normal? E que configuraçao e essa do Log4J pode me explicar?

1) Não faço ideia do porquê.

2) É a configuração do log. Faça uma busca no Google por log4j pelo menos.

N

evertonsilvagomesjava:
Bom dia pessoal!

Eu estou tentando gerar um Relatorio no Jasper, porém nao to conseguindo.

Esta me dando o seguinte erro no stack trace

log4j:WARN No appenders could be found for logger (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory). log4j:WARN Please initialize the log4j system properly. net.sf.jasperreports.engine.JRException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:249) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:228) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:216) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:170) at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:154) at Relatorio.Relatorio.gerar(Relatorio.java:27) at Relatorio.Relatorio.main(Relatorio.java:59) Caused by: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 1 of 1-byte UTF-8 sequence. at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.invalidByte(Unknown Source) at com.sun.org.apache.xerces.internal.impl.io.UTF8Reader.read(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.load(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.arrangeCapacity(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLEntityScanner.skipString(Unknown Source) at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source) at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at org.apache.commons.digester.Digester.parse(Digester.java:1647) at net.sf.jasperreports.engine.xml.JRXmlLoader.loadXML(JRXmlLoader.java:241) ... 6 more

Alguém ai sabe o que é, e pode me ajudar?

Valeu!!!

Eu ja tive este problema a solução foi gerar o relatorio atraves do JRXML e nao atraves do JASPER; abaixo meu codigo utilizado para gerar

String sqlConsulta = SELECT…”

//Caminho onde esta localizado o relatorio;;;; relatorio =  MEURELATORIO.JRXML

String caminho = request.getSession().getServletContext().getRealPath("/relatorios/" + relatorio);

//carrega .JRXML

JasperDesign design = JRXmlLoader.load(caminho);

//abre conexao

Connection con = ConexaoJDBC.getConnection();

//passa parametros

Map<String, Object> parametros = new HashMap<String, Object>();

parametros.put(REPORT_CONNECTION, con);//envia a conexao, sem ela nao gera subreports
JasperReport relatorioExp = JasperCompileManager.compileReport(design);
        Statement stm = (Statement) con.createStatement();
        ResultSet rs = (ResultSet) stm.executeQuery(sqlConsulta);
        JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);

        byte[] bytes = JasperRunManager.runReportToPdf(relatorioExp, parametros, jrRS);
        response.setContentType("application/pdf");
        response.setContentLength(bytes.length);
        ServletOutputStream ouputStream = response.getOutputStream();
        ouputStream.write(bytes, 0, bytes.length);
        ouputStream.flush();
        ouputStream.close();
        ConexaoJDBC.closeConnection();

abraço

Criado 8 de outubro de 2010
Ultima resposta 26 de jan. de 2011
Respostas 14
Participantes 5