Ресурс подотчета JasperReports не найден в Linux

У меня есть приложение Java 7, в котором необходимо создать PDF из XML-файлов. С помощью дизайнера iReport я успешно создал отчет. Этот отчет содержит вложенные подотчеты. У меня есть параметр 'SUBREPORT_DIR' в мастер-отчете, который передается во вложенные отчеты. Все файлы.jasper (master и subreports) включены в ресурсы проекта в каталоге /jasper/.

В Java я делаю следующее:

Map<String, Object> params = new HashMap<>();
params.put("SUBREPORT_DIR", "\\jasper\\" );
String sJasper = "/InvoiceMasterReport.jasper";
try (InputStream jasper = InvoiceTransformer.class.getResourceAsStream(sJasper)) {
     iReportTransformer irt = new iReportTransformer(file, pdfResult, jasper, params);
     irt.transformToPDF();
}

и в методе transformToPDF():

JRXmlDataSource jrSource = new JRXmlDataSource(noNS.toFile(), "/INVOICE");
JasperPrint jp = JasperFillManager.fillReport(_jasperStream, _params, jrSource);        
jrSource.close();               

JRPdfExporter exporter = new JRPdfExporter();
exporter.setParameter(JRExporterParameter.JASPER_PRINT, jp);
exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, _pdfResult.toString());
exporter.setParameter(JRPdfExporterParameter.PDFA_CONFORMANCE, JRPdfExporterParameter.PDFA_CONFORMANCE_1A);

URL url = this.getClass().getResource("/jasper/sRGB_v4_ICC_preference.icc");        
String iccPath = Paths.get(url.toURI()).toAbsolutePath().toString();
exporter.setParameter(JRPdfExporterParameter.PDFA_ICC_PROFILE_PATH, iccPath);
exporter.exportReport();

Теперь о проблеме: все это работает в разработке на машине с Windows, но когда я развертываюсь на Linux, я получаю JRException в методе exportReport()-:

Exception be.vanmarcke.edixml.CM8.TransformationException: net.sf.jasperreports.engine.JRException: Resource not found at : /jasper/SubReportHeader.jasper on /opt/EDIXML_docs/2014/April/29/16/invoices/T_1398780297363.xmlMessage: net.sf.jasperreports.engine.JRException: Resource not found at : /jasper/SubReportHeader.jasperStackTrace: 
be.vanmarcke.edixml.CM8.TransformationException: net.sf.jasperreports.engine.JRException: Resource not found at : /jasper/SubReportHeader.jasper 
at be.vanmarcke.edixml.CM8.InvoiceTransformer.XMLInvoiceToPDF_iReport(InvoiceTransformer.java:66)
at be.vanmarcke.edixml.invoices.InvoiceFileHandler.createPDF(InvoiceFileHandler.java:333)
at be.vanmarcke.edixml.invoices.InvoiceFileHandler.commitValidDocument(InvoiceFileHandler.java:358)
at be.vanmarcke.edixml.invoices.InvoiceFileHandler.commitDocument(InvoiceFileHandler.java:180)
at be.vanmarcke.edixml.general.AbstractFileHandler.handleParsedInputFiles(AbstractFileHandler.java:290)

....

Я пробовал несколько значений для параметра SUBREPORT_DIR, но ни одно из них не работает. У кого-нибудь есть какие-либо предложения или альтернативные решения для этого?

1 ответ

Решение

Что ж, я "исправил" это, не включив файлы.jasper в качестве ресурсов в файл jar. Вместо этого я загружаю файлы из внешней папки.

Другие вопросы по тегам