JasperReport erro de java.io.FileNotFoundException

2 respostas
D

Estou tentando gerar um relatorio pdf, mas fico recebendo o mesmo erro. Já tentei tudo que eu sabia.

O meu código do relatorio:

public class RelatorioAluno {
	private Integer matricula;
	private String nome;
	private String curso;
	private Double nota1;
	private Double nota2; 
	private static List <Aluno> listAluno;   
	       
	       
	       
	     @SuppressWarnings("unchecked")
		public void execute(ServletContext sc, HttpServletRequest request, HttpServletResponse response) {          
	         try {  
	             List <RelatorioAluno> listRelAluno = new ArrayList<RelatorioAluno>();  
	             AlunoDao dao = new AlunoDao();
	             listAluno = dao.getAllAlunos();   
	               
	             for(int i=0; i < listAluno.size(); i++){  
	                 RelatorioAluno relAluno = new RelatorioAluno();  
	                 relAluno.setMatricula((listAluno.get(i).getMatricula()));  
	                 relAluno.setNome((listAluno.get(i).getNome()));  
	                 relAluno.setCurso((listAluno.get(i).getCurso()));  
	                 relAluno.setNota1((listAluno.get(i).getNota1()));  
	                 relAluno.setNota2((listAluno.get(i).getNota2()));
	                 
	                 listRelAluno.add(relAluno);  
	             }  
	               
	             JRDataSource jrds = new JRBeanCollectionDataSource(listRelAluno);  
	                           
	             // parametros do relatorio  
	             HashMap parameters = new HashMap();  
	             // lendo arquivo jasper  
	             File reportFile = new File(sc.getRealPath("/rel"));  
	             
	             byte[] bytes = null;  
	             try {                  
	                 bytes = JasperRunManager.runReportToPdf(reportFile+"/aluno.jasper", parameters, jrds);  
	                 //JasperPrint print = JasperFillManager.fillReport(reportFile.getPath(), parameters, jrds);  
	               
	                 //bytes = JasperExportManager.exportReportToPdf(print);  
	                 //JasperViewer.viewReport( reportFile.getName() + ".pdf", false );  ]
	                 JasperViewer.viewReport(reportFile + "/aluno.jrprint", false);
	             } catch (Exception e) {                  
	                 e.printStackTrace();  
	                 return;  
	             }                                
	             //  
	             if (bytes != null && bytes.length > 0) {  
	                 response.setContentType("application/pdf");  
	                 response.setContentLength(bytes.length);  
	                 ServletOutputStream ouputStream = response.getOutputStream();  
	                 ouputStream.write(bytes, 0, bytes.length);  
	                 ouputStream.flush();  
	                 ouputStream.close();  
	             }  
	         } catch (Exception e) {  
	             e.printStackTrace();  
	         }  
	     }

e a exception que lança:

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: D:\raphael.campos\desenvolvimento\workspace\Relatorio\rel\aluno.jasper at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:84) at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:536) at net.sf.jasperreports.engine.JasperRunManager.runReportToPdf(JasperRunManager.java:387) at com.ireport.relatorio.RelatorioAluno.execute(RelatorioAluno.java:58) at com.ireport.controllers.ServRelatorio.service(ServRelatorio.java:29) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Unknown Source) Caused by: java.io.FileNotFoundException: D:\raphael.campos\desenvolvimento\workspace\Relatorio\rel\aluno.jasper ... 18 more

Valeu!

2 Respostas

D

É web ou desktop?
Se for web, tente relacionar o context e depois pegar o real path. Caso seja desktop, coloque a onde os relatórios estão (jasper e jrxml) na raiz do projeto, então referencie pelo nome da pasta + nome do relatório

D

É web a aplicação. Já relacionei o context na servlet aqui.

public class ServRelatorio extends HttpServlet{
	  private ServletContext sc;  
	  
	   public void init(ServletConfig config) throws ServletException {  
		           super.init(config);  
		           sc = config.getServletContext(); 
	   }
	   
	   protected void service(HttpServletRequest request, HttpServletResponse response)  
	     	throws ServletException, IOException {  
		   String acao = request.getParameter("acao"); 
		   if(acao.equals("Relatorio")){  
			   RelatorioAluno rd = new RelatorioAluno();
			   rd.execute(sc, request, response);  
		   }
E peguei o real path assim:
File reportFile = new File(sc.getRealPath("/rel"));
Criado 25 de novembro de 2010
Ultima resposta 25 de nov. de 2010
Respostas 2
Participantes 2