2014-12-26 2 views
0

Я пытаюсь Скомпилируем отчеты яшма файл (Invoice.jrxml), но я получаю эту ошибку Exception FileNotFoundFileNotFoundException в Jasper Reports

Переменная sourceFileName содержит имя файла файл находится в

SRC/com.medicam.servlets/Invoice.jrxml

Ниже мой код

String [] prod = request.getParameterValues("prodn[]"); 
     String [] pkgdate = request.getParameterValues("pkgdate[]"); 
     String [] manufact = request.getParameterValues("manufact[]"); 
     String [] exp = request.getParameterValues("exp[]"); 
     String [] batch = request.getParameterValues("batch[]"); 
     String [] unit = request.getParameterValues("unit[]"); 
     String [] qty = request.getParameterValues("qty[]"); 
     String [] subtot = request.getParameterValues("subtot[]"); 
     ArrayList<String> prodname = new ArrayList<String>(); 
     ArrayList<String> packagedate = new ArrayList<String>(); 
     ArrayList<String> manufactdate = new ArrayList<String>(); 
     ArrayList<String> exipry = new ArrayList<String>(); 
     ArrayList<String> batchno = new ArrayList<String>(); 
     ArrayList<String> unitprice = new ArrayList<String>(); 
     ArrayList<String> quantity = new ArrayList<String>(); 
     ArrayList<String> Subtotal = new ArrayList<String>(); 
     Map<String, Object> param = new HashMap<String, Object>(); 

     for(int i=0;i<prod.length;i++) 
     { 
      prodname.add(prod[i]); 
      packagedate.add(pkgdate[i]); 
      manufactdate.add(manufact[i]); 
      exipry.add(exp[i]); 
      batchno.add(batch[i]); 
      unitprice.add(unit[i]); 
      quantity.add(qty[i]); 
      Subtotal.add(subtot[i]); 
     } 
     param.put("prodname", prodname); 
     param.put("pkgdate", packagedate); 
     param.put("manfdate", manufactdate); 
     param.put("expdate", exipry); 
     param.put("batch", batchno); 
     param.put("unit", prodname); 
     param.put("qty", quantity); 
     param.put("subtot", Subtotal); 
     try { 
     String sourceFileName = "Invoice.jrxml"; 
     JasperReport jasperReport = JasperCompileManager.compileReport(sourceFileName); 
     JasperFillManager.fillReportToFile(
       sourceFileName, param); 

     JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, param, new JREmptyDataSource()); 
     JasperViewer.viewReport(jasperPrint, false); 
      } 
     catch (Exception e) { 
       e.printStackTrace(); 
      } 

StackTrace

net.sf.jasperreports.engine.JRException: java.io.FileNotFoundException: Invoice.jrxml (No such file or directory) 
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:214) 
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:185) 
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:176) 
    at net.sf.jasperreports.engine.JasperCompileManager.compile(JasperCompileManager.java:172) 
    at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:459) 
    at com.medicam.servlets.GenerateReportForPurchase.doPost(GenerateReportForPurchase.java:111) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:644) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:136) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:526) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:655) 
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.io.FileNotFoundException: Invoice.jrxml (No such file or directory) 
    at java.io.FileInputStream.open(Native Method) 
    at java.io.FileInputStream.<init>(FileInputStream.java:146) 
    at net.sf.jasperreports.engine.xml.JRXmlLoader.load(JRXmlLoader.java:209) 
    ... 29 more 

ответ

1

Очевидно, файл отчета не может быть найден простым именем файла.

Попробуйте загрузить как поток. Как это

InputStream is=this.getClass().getResourceAsStream("/com/medicam/servlets/Invoice.jrxml") 
JasperReport jasperReport = JasperCompileManager.compileReport(is); 
0

Необходимо указать имя файла либо с полным именем файла, либо относительно вашего текущего каталога java. Хорошей альтернативой использованию имени файла является использование InputStream, извлеченного через класс # getResourceAsStream. Это будет продолжаться, даже когда вы будете распространять свою функциональность, упакованную в архив jar. Использование имени файла, с другой стороны, означает, что вам необходимо распространять отчет как отдельный файл, и вам нужно позаботиться о том, чтобы вы исправили полное или относительное имя файла.

0

Пожалуйста, укажите полный путь к файлу, как

Струнный sourceFileName = "D: \ APPS \ Invoice.jrxml";

если так "Invoice.jrxml" существует в APPS папке D Drive (Это для окон)


Строка sourceFileName = "/usr/local/Invoice.jrxml";

if so "Invoice.jrxml" существует в локальном каталоге (это для Linux)

Смежные вопросы