NullPointerException ao tentar encontrar relatório Jasper no C: JSF

11 respostas
Diego_Adriano

Bem galera, estou tentado passar o caminho de um relatorio que esta no C: para o IReport mas não esta encontrando, porém testei em um projeto Desktop e funcionou …

FacesContext context = FacesContext.getCurrentInstance(); HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse(); InputStream reportStream = context.getExternalContext(). getResourceAsStream("C:/Dados_Projeto/Relatorios_Jasper/Boletos.jasper");

Jul 11, 2012 10:27:03 PM javax.faces.event.MethodExpressionActionListener processAction Grave: 'java.lang.NullPointerException' recebido ao invocar escuta de ação '#{relatoriosBoletos.gerarRelatorio}' para o componente 'j_idt47' Jul 11, 2012 10:27:03 PM javax.faces.event.MethodExpressionActionListener processAction Grave: java.lang.NullPointerException at java.io.ObjectInputStream$PeekInputStream.read(Unknown Source) at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.<init>(Unknown Source) at net.sf.jasperreports.engine.util.ContextClassLoaderObjectInputStream.<init>(ContextClassLoaderObjectInputStream.java:53) at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:193) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:603) at net.sf.jasperreports.engine.JasperRunManager.runReportToPdfStream(JasperRunManager.java:370) at br.com.boletos.relatorios.RelatoriosBoletos.gerarRelatorio(RelatoriosBoletos.java:88) 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:262) at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278) at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:153) at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88) at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:769) at javax.faces.component.UICommand.broadcast(UICommand.java:300) at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:794) at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1259) at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81) at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101) at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118) at javax.faces.webapp.FacesServlet.service(FacesServlet.java:593) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at br.com.boletos.filter.ControleFiltro.doFilter(ControleFiltro.java:33) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579) at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

11 Respostas

Hebert_Coelho

Oq tem aqui? at br.com.boletos.relatorios.RelatoriosBoletos.gerarRelatorio(RelatoriosBoletos.java:88)

Diego_Adriano

É o método que gera o relatorio

public void gerarRelatorio() throws IOException, JRException, ClassNotFoundException, SQLException{
		
		Connection conn = getConnection();
    	Statement stat = conn.createStatement();
    	String SQL = "SELECT "+
			   		     "lancamentos.`id` AS id, "+
			   		     "lancamentos.`dataemissao` AS dataemissao, "+
			   		     "lancamentos.`datavencimento` AS datavencimento, "+
			   		     "lancamentos.`observacao` AS observacao, "+
			   		     "lancamentos.`numBoleto` AS parcela, "+
			   		     "lancamentos.`valor` AS valorparc, "+
			   		     "usuario.`id` AS usuario_id, "+
			   		     "usuario.`nome` AS usuario_nome, "+
			   		     "cliente.`id` AS cliente_id, "+
			   		     "cliente.`nome` AS cliente_nome, "+
			   		     "cliente.`sobrenome` AS cliente_sobrenome, "+
			   		     "cliente.`cpf` AS cliente_cpf, "+
			   		     "cliente.`endereco` AS cliente_endereco, "+
			   		     "cliente.`numero` AS cliente_numero "+
			   		"FROM "+
			   		     "`usuario` usuario INNER JOIN `lancamentos` lancamentos ON usuario.`id` = lancamentos.`usuario` "+
			   		     "AND usuario.`id` = lancamentos.`usuario` "+
			   		     "INNER JOIN `cliente` cliente ON lancamentos.`cliente` = cliente.`id` "+
			   		"WHERE "+
			   		     "lancamentos.impresso = 'N'";//
    	
		ResultSet rs = stat.executeQuery(SQL);
		
		FacesContext context = FacesContext.getCurrentInstance();
		HttpServletResponse response = (HttpServletResponse) context.getExternalContext().getResponse();
		InputStream reportStream = context.getExternalContext().
				getResourceAsStream("C:/Dados_Projeto/Relatorios_Jasper/Boletos.jasper");
				
		
		Usuario sessao = new Usuario();
		HttpSession sessioon = (HttpSession) FacesContext.getCurrentInstance()
				.getExternalContext().getSession(false);
		
		sessao = (Usuario) sessioon.getAttribute("usuario");
		
		Map parametro = new HashMap();
		
		parametro.put("usuario", sessao.getNome().toUpperCase());
		
		//FORÇA O DOWNLOAD DO ARQUIVO
		//response.setContentType("application/pdf");
		//response.setHeader("Content-disposition", "attachament;filename=relatorio.pdf");
		
		try {
			ServletOutputStream servletOutputStream = response.getOutputStream();
			JRResultSetDataSource jrRS = new JRResultSetDataSource(rs);
			
			JasperRunManager.runReportToPdfStream(reportStream,servletOutputStream,parametro,jrRS);
			
			servletOutputStream.flush();
			servletOutputStream.close();
		
		} catch (JRException e) {
			e.printStackTrace();
		
		}catch (IOException e) {
			e.printStackTrace();
		
		}finally{
			context.responseComplete();
		}
		
		
		//gerarRelatorioWeb(jrRS,null,arquivo);
	}
Hebert_Coelho

Ok, a linha q eu postei lá em cima, aponta o local exato do nullpointer.

Vc debugou? em qual linha acontece o erro?

Diego_Adriano

O Erro é aqui:

InputStream reportStream = context.getExternalContext(). getResourceAsStream("C:/Dados_Projeto/Relatorios_Jasper/Boletos.jasper");
Quero pegar meu relatótio no C: pra facilitar as alterações nele.

Fiz dessa forma aqui pra testar:

InputStream reportStream = context.getExternalContext(). getResourceAsStream("/Relatorios_Jasper/Boletos.jasper");

Que é o Relatório que esta dentro do Projeto e rodou normalmente …

Rocklee6544

Quando vc usa /, vc usa um caminho relativo ao contexto do projeto.

Normalmente /nomeDoProjeto/webContent/qualquerPastaSeTiver/relatorios

Quando vc usa c:/ vc esta usando um caminho absoluto, então nesse caso , para pegar o arquivo do projeto no c://
teria que usar o caminho c://sua workspace até a pasta relátorios/.

gilvanandre

Tente desta forma (“C:\Dados_Projeto\Relatorios_Jasper\Boletos.jasper”)
Como é Windows pode ter alguma diferença!

Diego_Adriano

É … de nenhuma das duas formas funcionou …

renanjp

Saudações companheiro…

Tente usar:

String caminhoRelatorio = System.getProperty("user.dir") + "//Relatorios_Jasper//Boletos.jasper";
InputStream reportStream = context.getExternalContext().getResourceAsStream(caminhoRelatorio);

O getProperty da classe System recupera o diretorio do projeto…

caso não de certo…
ao inves do input Stream use isto:

JasperReport jr =  (JasperReport) JRLoader.loadObject(caminhoRelatorio);

Meritos ao Guilherme Pizzaia
:slight_smile:

Diego_Adriano

Continua com erro, porém, olha só o caminho que ele esta retornando:

C:\Documents and Settings\FISCAL\Meus documentos\eclipse//Dados_Projeto//Relatorios_Jasper//Boletos.jasper

esse cara aqui > \Documents and Settings\FISCAL\Meus documentos\eclipse/ não quero ele, pois a pasta esta aqui:

C:Dados_Projeto/

Se bem entendi isso irá me trazer o diretório do User certo ?

String caminhoRelatorio = System.getProperty("user.dir")

Mas, eu quero a raiz, independente do user logado

gilvanandre

System.getProperty(“user.dir”) - retorna o caminho de onde o projeto está sendo executado, ou seja, o local onde está o seu .jar!!!

Se você quiser outro caminho deverá adicionar manualmente, da forma que você está fazendo…
Mas não sei o porque permanece o erro!!!

Diego_Adriano

Certo ... fiz o seguinte:

//RETORNA O CAMINHO ATE O DESKTOP
String caminho = FileSystemView.getFileSystemView().getRoots()[0].toString();
//CONCATENO O CAMINHO COM A PASTA E O ARQUIVO
String caminhoRelatorio = caminho+"\\Dados_Projeto\\Relatorios_Jasper\\Boletos.jasper";
//CONCATENO O CAMINHO COM A PASTA E O ARQUIVO
Object caminhoLogo = caminho+"\\Dados_Projeto\\LogoTipo\\Logo_Sport.PNG";
	
System.out.println(caminho);
System.out.println(caminhoRelatorio);
System.out.println(caminhoLogo);
		
InputStream reportStream = context.getExternalContext().
		getResourceAsStream(caminhoRelatorio);
Saída do Console:
C:\Documents and Settings\FISCAL\Desktop
C:\Documents and Settings\FISCAL\Desktop\Dados_Projeto\Relatorios_Jasper\Boletos.jasper
C:\Documents and Settings\FISCAL\Desktop\Dados_Projeto\LogoTipo\Logo_Sport.PNG
Estranho, esta retornando NullPointerException ainda.

Bem, fiz um teste com uma classe simples, com os mesmos métodos e funciona, mas no Projeto no JSF não ..

Criado 11 de julho de 2012
Ultima resposta 12 de jul. de 2012
Respostas 11
Participantes 5