Problema ao chamar relatório feito no iReport dentro de aplicação JSF

5 respostas
M

Pessoal,

Estou tentando chamar um relatório feito no iReport através do seguinte método

... 
public boolean chamarRelatorio() { 
   
         String caminhoRelJasper = "/br/ufpb/nti/diploma/ireport/jrxml/report1.jrxml"; 

          InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper); 
          Map parametros = new HashMap(); parametros.put("situacao", 1); 
          GerarPDFCompilando gera = new GerarPDFCompilando();
          try  { 

                gera.geraPDFaqui(relJasper, parametros); 
                return true; 

           } catch(Exception e) { 

            return false; 
           } 
}
...

Abaixo, segue o código da classe GerarPDFCompilando com o metodo geraPDFaqui

public class GerarPDFCompilando{  
        
      public GerarPDFCompilando() {  
                
      public void geraPDFaqui(InputStream relJasper, Map parametros) throws IOException, ClassNotFoundException, SQLException {  
               
                 FacesContext facesContext = FacesContext.getCurrentInstance();  
                 HttpServletRequest request = (HttpServletRequest) facesContext.getExternalContext().getRequest();  
                 HttpServletResponse response = (HttpServletResponse) facesContext.getExternalContext().getResponse();  
       
                 Connection con = ConexaoDB.getInstance();  
              
                JasperPrint impressao = null;  
   
                 try {  

                         JasperReport jasper = JasperCompileManager.compileReport(relJasper);  
                         //Conversão do Formato Jasper para PDF. Aqui irá gerar o Arquivo para o usuário.  
                         impressao = JasperFillManager.fillReport(jasper, parametros, con);  
                         byte[] bytes = JasperExportManager.exportReportToPdf(impressao);  
                         response.setHeader("Content-Disposition", "attachment; filename=PRPG.pdf");   
                         response.setContentType("application/pdf");  
                         response.setContentLength(bytes.length);  
                         ServletOutputStream ouputStream = response.getOutputStream();  
                         ouputStream.write(bytes, 0, bytes.length);  
                         ouputStream.flush();  
                         ouputStream.close();        
  
  .            } catch (JRException e) { 
 
                  System.out.println(e.getMessage());  
               }  
    }  
}

E abaixo a chamada do método na página

...
   <div>  
   <h:commandButton action="#{consultaDiplomaBean.chamarRelatorio}" value="Gerar Relatorio" rendered="true" style="margin-left:300px; margin-top:10px"/>  
   </div>  
...

Ao usar o debug do Eclipse, percebi que está sendo atribuída uma referência NULL ao objeto relJasper no início do método chamarRelatorio

...  
InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);  
...

Alguém poderia me ajudar a descobrir o motivo pelo qual está ocorrendo esta referência NULL ?
Agradece,

Max Carvalho

5 Respostas

rdmardegam

Tente fazer assim:

this.getClass().getClassLoader().getResourceAsStream(caminhoRelJasper)
M

Ainda não deu para saber se a solução acima proposta funciona pois, ao tentar utilizá-la, surgiu um novo erro, abaixo descrito:

05/05/2010 15:29:54 org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:Teste' did not find a matching property.
05/05/2010 15:29:54 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: E:\Info\Java\jre1.6.0\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;E:/Info/Java/jre1.6.0/bin/client;E:/Info/Java/jre1.6.0/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;E:\Info\MySQL\bin;E:\Info\Java\jdk1.6.0\bin
05/05/2010 15:29:54 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
05/05/2010 15:29:54 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 499 ms
05/05/2010 15:29:54 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
05/05/2010 15:29:54 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.18
05/05/2010 15:29:56 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra (1.2_09-b02-FCS) for context '/Teste'
05/05/2010 15:29:56 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
05/05/2010 15:29:56 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
05/05/2010 15:29:56 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/32  config=null
05/05/2010 15:29:56 org.apache.catalina.startup.Catalina start
INFO: Server startup in 2210 ms
05/05/2010 15:30:06 org.apache.catalina.loader.WebappClassLoader modified
INFO:     Additional JARs have been added : 'jasperreports-3.7.0.jar'
05/05/2010 15:30:06 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
05/05/2010 15:30:07 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra (1.2_09-b02-FCS) for context '/Teste'
05/05/2010 15:30:17 org.apache.catalina.loader.WebappClassLoader modified
INFO:     Additional JARs have been added : 'jasperreports-3.7.0.jar'
05/05/2010 15:30:17 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
05/05/2010 15:30:17 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra (1.2_09-b02-FCS) for context '/Teste'
05/05/2010 15:30:27 org.apache.catalina.loader.WebappClassLoader modified
INFO:     Additional JARs have been added : 'jasperreports-3.7.0.jar'
05/05/2010 15:30:27 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
05/05/2010 15:30:28 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra (1.2_09-b02-FCS) for context '/Teste'
05/05/2010 15:30:38 org.apache.catalina.loader.WebappClassLoader modified
INFO:     Additional JARs have been added : 'jasperreports-3.7.0.jar'
05/05/2010 15:30:38 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
05/05/2010 15:30:38 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra (1.2_09-b02-FCS) for context '/Teste'
05/05/2010 15:30:48 org.apache.catalina.loader.WebappClassLoader modified
INFO:     Additional JARs have been added : 'jasperreports-3.7.0.jar'
05/05/2010 15:30:48 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
05/05/2010 15:30:49 com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra (1.2_09-b02-FCS) for context '/Teste'
05/05/2010 15:30:59 org.apache.catalina.loader.WebappClassLoader modified
INFO:     Additional JARs have been added : 'jasperreports-3.7.0.jar'
05/05/2010 15:30:59 org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started
05/05/2010 15:30:59 org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated
05/05/2010 15:30:59 org.apache.commons.digester.Digester error
SEVERE: Parse Error at line 2 column 417: Document root element "jasperReport", must match DOCTYPE root "null".
org.xml.sax.SAXParseException: Document root element "jasperReport", must match DOCTYPE root "null".
...

E o problema continua… ???
Agradece,

Max Carvalho

UMC

vê se ajuda!
Gerar Relatório .PDF em uma Servlet

vlw

rdmardegam

Amigo.

Para saber se o seu erro está na hora de direcionar o arquivo, você pode fazer este teste:

Coloque seu arquivo jasper no diretorio “c:”

InputStream relJasper = new FileInputStream(new File(“c:\relatorio.jasper”));

Neste casso ele pegara corretamente o arquivo q contem seu layout de relatorio !! Caso nao funcione assim, provavelmente seu codigo contem algum erro, ou entao os paramentros que você está passando ao jasper estão nulos ou não existem.

Espero ter ajudado, qualquer coisa me add no msn ae : [email removido]

M

rdmardegan,

Tentei a solução de usar o FileInputStream, e agora me surge este outro erro :

NFO: Initializing Mojarra (1.2_09-b02-FCS) for context '/Teste'
05/05/2010 17:19:04 com.sun.faces.application.ActionListenerImpl processAction
SEVERE: java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException
javax.faces.el.EvaluationException: java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:387)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException
	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 net.sf.jasperreports.engine.JasperCompileManager.getCompiler(JasperCompileManager.java:476)
	at net.sf.jasperreports.engine.JasperCompileManager.loadEvaluator(JasperCompileManager.java:242)
	at net.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:411)
	at net.sf.jasperreports.engine.fill.JRBaseFiller.<init>(JRBaseFiller.java:405)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:77)
	at net.sf.jasperreports.engine.fill.JRVerticalFiller.<init>(JRVerticalFiller.java:59)
	at net.sf.jasperreports.engine.fill.JRFiller.createFiller(JRFiller.java:147)
	at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:57)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
	at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:363)
	at br.teste.gerador.GerarPDF.geraPDFaqui(GerarPDF.java:56)
	at br.teste.bean.TesteBean.chamarRelatorio(TesteBean.java:59)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
	at java.lang.reflect.Method.invoke(Unknown Source)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:172)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:68)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 20 more
05/05/2010 17:19:04 com.sun.faces.lifecycle.InvokeApplicationPhase execute
WARNING: #{TesteBean.chamarRelatorio}: java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException
javax.faces.FacesException: #{TesteBean.chamarRelatorio}: java.lang.NoClassDefFoundError: org/codehaus/groovy/control/CompilationFailedException

Porém, a classe TesteBean existe e está configurada no faces-config.xml, como segue

<?xml version="1.0" encoding="UTF-8"?>
<faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

	<managed-bean>
		<managed-bean-name>TesteBean</managed-bean-name>
		<managed-bean-class>br.teste.bean.TesteBean</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	
</faces-config>

E o problema continua…

Criado 4 de maio de 2010
Ultima resposta 5 de mai. de 2010
Respostas 5
Participantes 3