publicvoidgeraPDParaOutputStream(OutputStreamoutputStream){try{JasperPrintjasperPrint=JasperFillManager.fillReport(this.nomeArquivo,this.parametros,this.connection);JRExporterexporter=newJRPdfExporter();exporter.setParameter(JRExporterParameter.JASPER_PRINT,jasperPrint);exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,outputStream);exporter.exportReport();}catch(JRExceptione){// TODO Auto-generated catch blocke.printStackTrace();}}
Erro:
Jul29,20164:01:28PMorg.apache.catalina.core.StandardWrapperValveinvokeSEVERE:Servlet.service()forservlet[dispatcher]incontextwithpath[/report]threwexception[Handler processing failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/collections/map/ReferenceMap]withrootcausejava.lang.ClassNotFoundException:org.apache.commons.collections.map.ReferenceMapatorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1702)atorg.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)atnet.sf.jasperreports.engine.design.JRAbstractJavaCompiler.(JRAbstractJavaCompiler.java:73)atsun.reflect.NativeConstructorAccessorImpl.newInstance0(NativeMethod)atsun.reflect.NativeConstructorAccessorImpl.newInstance(UnknownSource)atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(UnknownSource)atjava.lang.reflect.Constructor.newInstance(UnknownSource)atnet.sf.jasperreports.engine.JasperCompileManager.getCompiler(JasperCompileManager.java:823)atnet.sf.jasperreports.engine.JasperCompileManager.getEvaluator(JasperCompileManager.java:380)atnet.sf.jasperreports.engine.fill.JRFillDataset.createCalculator(JRFillDataset.java:467)atnet.sf.jasperreports.engine.fill.BaseReportFiller.(BaseReportFiller.java:152)atnet.sf.jasperreports.engine.fill.JRBaseFiller.(JRBaseFiller.java:244)atnet.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:69)atnet.sf.jasperreports.engine.fill.JRVerticalFiller.(JRVerticalFiller.java:57)atnet.sf.jasperreports.engine.fill.JRFiller.createBandReportFiller(JRFiller.java:200)atnet.sf.jasperreports.engine.fill.JRFiller.createReportFiller(JRFiller.java:215)atnet.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:84)atnet.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:286)atnet.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:759)atcom.ambra.report.utils.GeradorRelatorioUtil.geraPDParaOutputStream(GeradorRelatorioUtil.java:29)atcom.ambra.report.controlls.RelatorioController.form(RelatorioController.java:88)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(UnknownSource)atsun.reflect.DelegatingMethodAccessorImpl.invoke(UnknownSource)atjava.lang.reflect.Method.invoke(UnknownSource)atorg.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215)atorg.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)atorg.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:781)atorg.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:721)atorg.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)atorg.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)atorg.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)atorg.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)atorg.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:647)atorg.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:728)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)atorg.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)atorg.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)atorg.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)atorg.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)atorg.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)atorg.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)atorg.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)atjava.util.concurrent.ThreadPoolExecutor.runWorker(UnknownSource)atjava.util.concurrent.ThreadPoolExecutor$Worker.run(UnknownSource)atjava.lang.Thread.run(UnknownSource)
Estava procurando e achei este link, dai eu vi que pode ser falta do jasper la no maven. Eu tinha baixado o jar e tinha adicionado no class path.
Isso pode ser que tenha algumas dependências duplicadas, e a hora que o classLoader, vai ler lê primeiro em pacotes diferentes e methods diferentes.
Para analisar isso rode, usando o maven dependency:tree
Ai analise as duplicadas, mesma lib, com varias dependências lib-1.0.java lib-1.1…java, deixe só a que for necessária para seu projeto
Outra dica para ver classes e lib duplicadas no projeto
pegue o nome da classe no eclipse
shift + ctrl + t e digite a classe com o pacote dela, depois com o nome vai ver que ela pode estar em dois pacotes diferentes isso é por causa de versões duplicadas.
D
denisspitfire
retirei a classe duplicada agora, testei, e não esta dando + erro. Porem nao acho o relatorio
não entendi isso que voce mandou. Foi a saida do maven tree? como eu rodo isso? pelo cmd?
M
MarceloNeo
Isso que mandei é o que precisa para configurar e remover artefatos duplicados do projeto
pode usar pelo cmd, ou direto pelo eclipse, tem no netBeans também, mas faz muito tempo que não o uso mais
No Eclipse -> No Icone “Debug” vá em “Debug Configuration”
No menu "Mavem Build"
Da um “new” em “Gools” coloca esse comando que passei acima, não esquece de apontar para o projeto que esta analisando "Base Workspace"
Ai ele vai gerar sua hierarquia de dependecias…
Ai joga em Editor de sua preferencia para fazer a analise…
e verifica as lib duplicadas
D
denisspitfire
acho que nao esta funcionando pelo formato da data que estou enviando ao relatorio. Ele não faz nada nao me retorna nada. Mas quando eu mando uma String ao invés de um date, ele me retorna que nao conseguiu fazer o parse.
como posso saber no jasper qual pattern ele espera para a entrada de data?
M
MarceloNeo
Tem olhar ele e ver que tipo de data ele espera
D
denisspitfire
é um param
M
MarceloNeo
então passa ele como paramtro
do tipo java.util.Date, dessa forma se o relatório estiver certo já imprime
D
denisspitfire
eu acho que ja esta passando assim. Não sei se esta correto.
Deve estar funcionando, mas eu nao acho o pdf gerado.
@RequestMapping(value="/report/relatorio",method=RequestMethod.POST,produces=MediaType.APPLICATION_JSON_VALUE)publicStringform(@RequestParam("id[]")intid[],@RequestParam("dateIni")@DateTimeFormat(pattern="dd/MM/yyyy")DatedateIni,@RequestParam("dateFim")@DateTimeFormat(pattern="dd/MM/yyyy")DatedateFim,@RequestParam("horaInit")StringhoraInit,@RequestParam("minutoInit")StringminutoInit,@RequestParam("horaFim")StringhoraFim,@RequestParam("minutoFim")StringminutoFim)throwsJRException,FileNotFoundException,SQLException{Calendarcal=Calendar.getInstance();Relatoriorelatorio=newRelatorio();relatorio.setTag((int)cal.getTimeInMillis());relatorio.setMachinesIds(id);relatorio.setDateIni(dateIni);relatorio.setDateFim(dateFim);relatorio.setHoraInit(horaInit);relatorio.setMinutoInit(minutoInit);relatorio.setHoraFim(horaFim);relatorio.setMinutoFim(minutoFim);System.out.println(relatorio.toString());for(inti=0;i<relatorio.getMachinesIds().length;i++){TemporaryMachineIdtempMachine=newTemporaryMachineId();tempMachine.setMachineId(relatorio.getMachinesIds()[i]);tempMachine.setTag(relatorio.getTag());tempMachineDao.gravar(tempMachine);}Stringnome=request.getServletContext().getRealPath("/WEB-INF/jasper/reportMaquinaData");JasperCompileManager.compileReportToFile(nome+".jrxml");Map<String,Object>parametros=newHashMap<String,Object>();parametros.put("dataIni",relatorio.getDateIni());parametros.put("dataFim",relatorio.getDateFim());//parametros.put("dataIni", "Mon Aug 01 00:00:00 BRT 2016");//parametros.put("dataFim", "Sat Aug 27 00:00:00 BRT 2016");//Pegar connection do hibernateConnectionconn=tempMachineDao.retornaCon();GeradorRelatorioUtilgeradorRelatorio=newGeradorRelatorioUtil(nome+".jasper",parametros,conn);geradorRelatorio.geraPDParaOutputStream(newFileOutputStream(nome+".pdf"));return"/relatorio/ok";}
M
MarceloNeo
Coloca um path nesse nome, pra ver o arquivo
Tipo: C:/tmp/relatorio/relatorio.pdf, windows
ou /tmp/relatorio/relatorio.pdf linux
Ou pega esse stream e joga para o requeste ou reponse não lembro direito e manda pra o browser do cliente
D
denisspitfire
mudei o retorno, e nada.
publicJRPdfExporterform(@RequestParam("id[]")intid[],@RequestParam("dateIni")@DateTimeFormat(pattern="dd/MM/yyyy")DatedateIni,@RequestParam("dateFim")@DateTimeFormat(pattern="dd/MM/yyyy")DatedateFim,@RequestParam("horaInit")StringhoraInit,@RequestParam("minutoInit")StringminutoInit,@RequestParam("horaFim")StringhoraFim,@RequestParam("minutoFim")StringminutoFim)throwsJRException,FileNotFoundException,SQLException{Calendarcal=Calendar.getInstance();Relatoriorelatorio=newRelatorio();relatorio.setTag((int)cal.getTimeInMillis());relatorio.setMachinesIds(id);relatorio.setDateIni(dateIni);relatorio.setDateFim(dateFim);relatorio.setHoraInit(horaInit);relatorio.setMinutoInit(minutoInit);relatorio.setHoraFim(horaFim);relatorio.setMinutoFim(minutoFim);System.out.println(relatorio.toString());for(inti=0;i<relatorio.getMachinesIds().length;i++){TemporaryMachineIdtempMachine=newTemporaryMachineId();tempMachine.setMachineId(relatorio.getMachinesIds()[i]);tempMachine.setTag(relatorio.getTag());tempMachineDao.gravar(tempMachine);}Stringnome=request.getServletContext().getRealPath("/WEB-INF/jasper/reportMaquinaData");JasperCompileManager.compileReportToFile(nome+".jrxml");Map<String,Object>parametros=newHashMap<String,Object>();parametros.put("dataIni",relatorio.getDateIni());parametros.put("dataFim",relatorio.getDateFim());parametros.put("tag",relatorio.getTag());//parametros.put("dataIni", "Mon Aug 01 00:00:00 BRT 2016");//parametros.put("dataFim", "Sat Aug 27 00:00:00 BRT 2016");//Pegar connection do hibernateConnectionconn=tempMachineDao.retornaCon();GeradorRelatorioUtilgeradorRelatorio=newGeradorRelatorioUtil(nome+".jasper",parametros,conn);//geradorRelatorio.geraPDParaOutputStream(new FileOutputStream(nome+".pdf"));returngeradorRelatorio.geraPDParaOutputStream(newFileOutputStream(nome+".pdf"));}```mastemumpath.```Stringnome=request.getServletContext().getRealPath("/WEB-INF/jasper/reportMaquinaData");```
M
MarceloNeo
Mas você permissão pra escrita nessa path?
D
denisspitfire
nao sei. Como posso verificar?
D
denisspitfire
mas de qualquer forma eu tenho que retornar pro cliente mesmo como se fosse um download
M
MarceloNeo
isso é permissões de usuários e aplicativos
Coloca em uma pasta que foi tu que criou, teu usuário. depois tu vai atraz disso
D
denisspitfire
blz, fiz esse teste coloquei em c:teste e rolou, ele compila, e cria um pdf. Legal. Porem nao aparece nada.
fica um pdf em branco.
nao da pra monitorar o mysql para saber se ele realmente foi pesquisado?
D
denisspitfire
e ele também trava o arquivo, preciso parar o tomcat para que ele possa ser aberto.