Aplicação Grails com relatório no apache
14/07/2011 20:21
0
Salve galera!!!

seguinte...

tenho uma aplicação Grails com uns relatários usando jasperreports 3.7.5, a aplicação localmente funciona sem problemas, mas quando vou acessa-la no tomcat 6.0.29 os relátorios não funcionam, já coloquei o jar do jasper na lib do tomcat mas não resolveu o problema. Alguem já passou por esse problema ou sabe a solução?

stack trace:

ava.lang.NullPointerException
at net.sf.jasperreports.engine.JRPropertiesMap.readObject(JRPropertiesMap.java:185)
at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readArray(ObjectInputStream.java:1667)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1323)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:192)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:361)
at net.sf.jasperreports.engine.JasperFillManager$fillReport.call(Unknown Source)
at JasperService$_closure1.doCall(JasperService.groovy:88)
at JasperController$_closure2.doCall(JasperController.groovy:84)
at JasperController.invokeMethod(JasperController.groovy)
at JasperController$_closure1.doCall(JasperController.groovy:55)
at JasperController$_closure1.doCall(JasperController.groovy)
at java.lang.Thread.run(Thread.java:619)
Tags: apache tomcat ireport jasperreports relatório


1
Oi cpinheiro,

bom, pelo seu stacktrace não há muito o que possa ser dito. Problema com jar ausente ou incorreto, acredito que não seja, visto que não apareceu nenhum ClassNotFoundException ou ClassCastException ou monstrinho similar.

Mas, pode ser algo relacionado ao seu código. Tenho uma listinha aqui que talvez possa te ajudar de alguma forma.

* Há algum trecho do código responsável pela geração do relatório que seja dependente do ambiente em que o sistema é executado? Exemplo: tentar carregar um arquivo .jrxml a partir de um path específico na rede. Já vi, por exemplo, o desenvolvimento feito em Windows e a execução em Linux. E neste processo, sem querer o path ir no formato do sistema operacional de origem. É estranho, mas acontece com frequencia.

* Será que as propriedades que você está passando para o seu objeto de relatório em tempo de execução estão 100% preenchidas ou corretas? O objeto que você está enviando para a classe net.sf.jasperreports.engine.JRPropertiesMap.readObject(JRPropertiesMap.java:185) é nulo.

* Da uma olhada neste link. É exatamente o mesmo problema. http://stackoverflow.com/questions/2521875/how-to-solve-this-nullpointer-exception-in-jasper-report


0
Oi Kico,

vlw pelas dicas, mas mesmo assim continuo "penando" para fazer esses relatorios funcionarem no tomcat. Assim que descobrir a solução posto nesse tópico.

15/07/2011 15:49


0
Boa Tarde,

Também estou com o mesmo problema.
Quando executo a aplicação localmente os relatórios executam normalmente, porém quando gero o .war da aplicação e coloco no servidor tomcat é gerada uma nullpointerexecption.

Já verifiquei o código e o caminho do servidor está correto, já atualizei o plugin e também não funcionou.

Se alguem já passou por isso sou souber de alguma coisa a mais pra tentar posta aí..

Grato desde já


0
Oi Iohan, você está tendo o mesmo stacktrace que o cpinheiro?


0
Oii!

Desculpa.. esqueci de colocar.. mas é o mesmo stacktrace sim


1
Opa, pode ser um problema de classpath também.

Normalmente, quando trabalhamos com o Jasper, enviamos para ele um stream representando o relatório no formato .jrxml ou mesmo recursos. Tentem o seguinte: no momento em que forem carregar o recurso, usem a seguinte instrução:


getClass().getClassLoader().getResourceAsStream("caminho pro seu recurso")


Costuma funcionar.


0
Vou colocar a minha classe aqui pra vc dar uma olhada e pra ver se eu entendi.

com a classe dessa maneira a variavel is do InputStream está vindo com valou null


public File generate(String reportName, String registroAcademico, Integer cdAcad) {
reportName = reportName+".jasper"
SimpleDateFormat formatDia = new SimpleDateFormat("yyyyMMdd")
SimpleDateFormat formatHora = new SimpleDateFormat("HHmmss")
SimpleDateFormat formatDateHour = new SimpleDateFormat("'Emitido às 'HH:mm:ss' do dia 'dd/MM/yyyy,")
SimpleDateFormat formatValidityDate = new SimpleDateFormat("'válido e disponível para conferência até 'dd/MM/yyyy")

def con = null

InputStream is = this.getClass().getClassLoader().getResourceAsStream("web-app/reports/" + reportName);

String pathPDF = "/var/lib/tomcat5.5/webapps/www/autenticidade/"

.
. //Faço a passagem de parâmetros e abro
.

try {

// Aqui ele cria o relatório
JasperPrint impress = JasperFillManager.fillReport(is, parameters, con);
// Grava o relatório em disco em pdf
JasperManager.printReportToPdfFile(impress, pathPDF + fileKey + ".pdf");

File file = new File(pathPDF + fileKey + ".pdf")

return file


} catch (Exception e) {
println e
}




0
Lohan,

No meu caso o problema estava na geração do .war, por algum motivo o war gerado na minha maquina apresentava problemas, após gerar o war em outra maquina resolvi meu problema. Talvez esse não seja seu caso, mas vale a pena conferir.

abs
20/07/2011 10:13


0
Sugestão: não salve os seus arquivos de relatório no WEB-APP/reports, mas em algum jar do seu projeto mesmo, e o carregue a partir do package.

Já vi problema demais quando se usa o WEB-INF como diretório de resources. Costuma funcionar. Faça isto e depois me conte o resultado ok?


0
Obrigado pelas respostas...

cpinheiro,

Recentemente as máquinas de onde eu trabalho foram formatadas, a partir daí que os relatórios pararam de funcionar, por isso creio que seja alguma configuração do netbeans, grails, ou plugins.

Kico,
Usei a instrução que vc recomendou e os relatórios funcionaram normalmente quando executado localmente, porém quando o gerei o war e coloquei no tomcat o problema continuou.

Não entendi direito o que você quis dizer com salvar em algum jar do projeto, pode me explicar melhor?

Grato desde já


0
Oi Iohan,

o que eu quis dizer foi você incluir os arquivos que estão sendo lidos pelo stream não no diretório web-inf, mas sim em algum pacote de código fonte mesmo da sua aplicação, saca?

Por exemplo: em algum pacote dentro do diretório src/groovy ou src/java do seu projeto, saca?


0
Estou com o mesmo problema e, assim como o Iohan, já tentei fazer tudo o que sugeriram e algumas coisas a mais, como atualizar o plugin e a versão do grails. Localmente funciona, mas quando gero o war o problema aparece. Se tiver algum avanço, posto aqui. Mais alguma sugestão?
20/07/2011 13:37


0
Oi Kico,

Entendi, coloquei os arquivos no diretório, porem o erro persiste.

Na minha aplicação tenho dois tipos de relatório, uns são chamados através das tags disponibilizadas pelo plugin jasper e outros eu chamo pela classe java que eu coloquei no post anterior.

Porém localmente os 2 tipos funcionam e quando coloco no tomcat nenhum deles funciona, o erro é sempre o mesmo. NullpointerException

Por esse motivo eu acredito que não seja nada com relação ao caminho do servidor ou onde estão os arquivos.

Vou continuar na luta aqui, se descobrir a resposta eu posto aqui. Caso tenham alguma sugestão por favor, postem também.


4
Iohan encontrei a solução...

Basta você deletar o jar jasperreports-2.0.5, que está na lib da versão do grails que você está utilizando, no meu caso 1.3.4. Deve permanecer nessa pasta apenas o jasperreports-3.7.3.

Espero ter te ajudado.
21/07/2011 11:34


0
Oi Emanoély

Obrigado
Funcionou certinho..
Retirei o jar que você mencionou e atualizei o plugin pra versão 1.0.0


Obrigado :D


0
Grande Emanoély!

Te dar uma idéia: contacte o autor do plugin a respeito do problema. Assim além de ajudar todo o pessoal que o usa, também vai estar participando de um projeto open source. Faz muito bem pro currículo!



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto