Estou com dificuldades de montar um formulário em pdf, pois não consigo colocar as variáveis da minha página form.jsp no meu DataSource…
Estou usando Struts, então quando o usuário preenche o formulário e clica enviar, é preenchido um ActionForm, o qual possui um método toList() que pega os valores todos e joga numa List para ser usado no construtor do DataSource…
Mas quando é executado, ele dá um erro de ClassException no método next() do meu DataSource, justamente ness linha:
Terias como você publicar um pouco mais do código e da stacktrace?
Até!
H
hugohasth
a classe DataSource:
packagebr.com.cabesp.commons.dao;importjava.util.Iterator;importjava.util.List;importbr.com.cabesp.autorizacao.vo.SolicitaAutorizacaoVO;importnet.sf.jasperreports.engine.JRDataSource;importnet.sf.jasperreports.engine.JRException;importnet.sf.jasperreports.engine.JRField;publicclassSolicitaAutorizacaoDataSourceimplementsJRDataSource{// VO do Formulario de reembolso .privateSolicitaAutorizacaoVOobjectVO;privateIteratorlistVO;publicSolicitaAutorizacaoDataSource(Listlist){listVO=list.iterator();}publicbooleannext()throwsJRException{booleanresult=false;try{if(listVO.hasNext()){objectVO=(SolicitaAutorizacaoVO)listVO.next();result=true;}else{result=false;}}catch(Exceptione){System.out.println(e);result=false;}returnresult;}publicObjectgetFieldValue(JRFieldjrField){Objectvalor=null;if(jrField.getName().equalsIgnoreCase("nomePaciente")){valor=objectVO.getNomePaciente();}elseif(jrField.getName().equalsIgnoreCase("nomeSolicitante")){valor=objectVO.getNomeSolicitante();}returnvalor;}}
A action que controla os fluxos:
packagebr.com.cabesp.autorizacao.action;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importnet.sf.jasperreports.engine.JasperExportManager;importnet.sf.jasperreports.engine.JasperFillManager;importnet.sf.jasperreports.engine.JasperPrint;importorg.apache.struts.action.ActionForm;importorg.apache.struts.action.ActionForward;importorg.apache.struts.action.ActionMapping;importorg.apache.struts.actions.DispatchAction;importbr.com.cabesp.autorizacao.vo.SolicitaAutorizacaoVO;importbr.com.cabesp.commons.dao.SolicitaAutorizacaoDataSource;importbr.com.cabesp.login.LoginUtil;publicclassSolicitaAutorizacaoActionextendsDispatchAction{/** * Formulário para autorizações médicas do prestador. */publicActionForwardformulario(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{ActionForwardact=LoginUtil.checkLogin(mapping,request,response);if(act!=null){returnact;}returnmapping.findForward("formulario");}/** * Processo de envio do formulário de autorizações médicas do prestador. */publicActionForwardenviar(ActionMappingmapping,ActionFormform,HttpServletRequestrequest,HttpServletResponseresponse)throwsException{ActionForwardact=LoginUtil.checkLogin(mapping,request,response);if(act!=null){returnact;}SolicitaAutorizacaoFormdadosAutoriz=(SolicitaAutorizacaoForm)form;Listlista=newArrayList();lista=dadosAutoriz.toList();response.setContentType("application/pdf");Mapmap=newHashMap();map.put("logoCabesp",getServlet().getServletContext().getRealPath("/images/LOGOplanofamilia-pb.jpg"));map.put("logoans",getServlet().getServletContext().getRealPath("/images/cabesp_ans.jpg"));StringsFile=getServlet().getServletContext().getRealPath("/WEB-INF/classes/solicitaAutorizacao.jasper");Filefile=newFile(sFile);SolicitaAutorizacaoDataSourceds=newSolicitaAutorizacaoDataSource(lista);JasperPrintprint=JasperFillManager.fillReport(newFileInputStream(file),map,ds);BufferedOutputStreambos=newBufferedOutputStream(response.getOutputStream());JasperExportManager.exportReportToPdfStream(print,bos);returnmapping.findForward(null);}}
StandardWrapperValve[action]:Servlet.service()forservletactionthrewexceptionjavax.servlet.ServletExceptionatorg.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:545)atorg.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:486)atorg.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)atorg.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)atorg.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:760)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:853)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)atorg.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)atorg.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)atorg.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)atorg.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)atorg.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)atorg.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)atjava.lang.Thread.run(Thread.java:595)----- Root Cause -----java.lang.NullPointerExceptionatbr.com.cabesp.commons.dao.SolicitaAutorizacaoDataSource.<init>(SolicitaAutorizacaoDataSource.java:21)atbr.com.cabesp.autorizacao.action.SolicitaAutorizacaoAction.enviar(SolicitaAutorizacaoAction.java:73)atsun.reflect.NativeMethodAccessorImpl.invoke0(NativeMethod)atsun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)atsun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)atjava.lang.reflect.Method.invoke(Method.java:585)atorg.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)atorg.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)atorg.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)atorg.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)atorg.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)atorg.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:760)atjavax.servlet.http.HttpServlet.service(HttpServlet.java:853)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)atorg.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)atorg.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)atorg.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)atorg.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)atorg.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)atorg.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)atorg.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)atorg.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)atorg.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)atorg.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)atorg.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)atorg.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)atorg.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)atorg.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)atorg.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)atjava.lang.Thread.run(Thread.java:595)
maquiavelbona
Opa!
Terias como verificar se listaVO é nulo? Creio que o problema seja ou quando populas o objeto ou quando envias para retirar os valores para complementar seu pdf.
Até!
H
hugohasth
Apesar de serem todas variáveis globais, eu inicializei todas elas com um valor em branco, já para não ter problemas com NullPointerException, mas parece que não adiantou?..
O que será que falta aqui???
maquiavelbona
Certo,
consegues me garantir que ele não está caindo no catch do método next e nem retornando objeto nulo no getFieldValue?
Até!
GraveDigger
Cara, vc está criando a List
private Iterator listVO;
Mas onde vc está INICIALIZANDO a list?
maquiavelbona
Opa!
Em tese está sendo inicializado no construtor
public SolicitaAutorizacaoDataSource(List list) {
listVO = list.iterator();
}
H
hugohasth
Essa List é inicializada no construtor:
public SolicitaAutorizacaoDataSource(List list) {
listVO = list.iterator();
}
Ele vai fazer o cast do Value Object SolicitaAutorizacaoVO e dispara o erro
ClassCastException…
O que tem de errado?
Outros módulos funcionam essa lógica, com busca no BD, mas esse que tem os dados vindo da página não dá certo!!!
maquiavelbona
Será que você não está retornando coisas erradas?
Quando você cria a lista, você a popula com objetos tipo:
lista.add(fourthCodigoProcedimento);
e não com objeto do tipo SolicitaAutorizacaoVO.
Verifique isso colocando esse trecho de código só para garantir:
if (listVO.hasNext()) {
Object temp = listVO.next();
System.out.println("A classe é "+ temp.getClass());
objectVO = (SolicitaAutorizacaoVO) temp;
result = true;
}
E veja se realmente se é o tipo que queres.
Até!
H
hugohasth
Vc acertou em cheio…
Este trecho de código esta tentando fazer um Cast de um String para o Value Object…
Bem, ok, descoberto, mas onde eu concerto esse problema, ou seja, onde eu passei os parâmetros errado?
Alguma dica?
maquiavelbona
Poderias mudar o método toList() para toSolicitaAutorizacaoVO() e ao invés de popular um list, preencha o VO de acordo com os dados e farias algo assim:
public SolicitaAutorizacaoVO toSolicitaAutorizacaoVO(){
SolicitaAutorizacaoVO vo = new SolicitaAutorizacaoVO();
vo.setQuartoCodigoProcedimento(fourthCodigoProcedimento);
...
return vo;
}
Se tiver algum erro de escrita, não ligue, estou fazendo de cabeça.