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)
Oq tem aqui? at br.com.boletos.relatorios.RelatoriosBoletos.gerarRelatorio(RelatoriosBoletos.java:88)
É o método que gera o relatorio
[code]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);
}[/code]
Ok, a linha q eu postei lá em cima, aponta o local exato do nullpointer.
Vc debugou? em qual linha acontece o erro?
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 …
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/.
Tente desta forma (“C:\Dados_Projeto\Relatorios_Jasper\Boletos.jasper”)
Como é Windows pode ter alguma diferença!
É … de nenhuma das duas formas funcionou …
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);
[quote]Meritos ao Guilherme Pizzaia[/quote] 
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
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!!!
Certo … fiz o seguinte:
[code]//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);[/code]
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 …