在Tomcat下加载jrxml文件

时间:2014-03-03 22:30:27

标签: java tomcat grails jasper-reports dynamic-jasper

我有一个使用 JasperReports 的网络应用程序,可以将数据导出到Excel,PDF和Excel。 CSV。它是一个使用 DynamicJasperReports 插件的grails应用程序,它使用jrxml文件作为报告的模板。

这是有效的,但是在对我们的tomcat配置进行了一些更改后,它已经崩溃了。它仍然在grails开发模式下本地工作。

FastReportBuilder drb = new FastReportBuilder()
drb.setTemplateFile("resources/reportTemplate.jrxml")

DynamicReport report = reportBuilder.call(drb)

JRDataSource ds = new JRMapCollectionDataSource(data)

JasperPrint jp = DynamicJasperHelper.generateJasperPrint(report, new ClassicLayoutManager(), ds)
ReportWriter reportWriter = ReportWriterFactory.getInstance().getReportWriter(jp, format, [:])
reportWriter.writeTo(response)

它抛出了这个错误:

java.lang.NullPointerException
at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperDesign(DynamicJasperHelper.java:151)
at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperReport(DynamicJasperHelper.java:448)
at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperPrint(DynamicJasperHelper.java:234)
at ar.com.fdvs.dj.core.DynamicJasperHelper.generateJasperPrint(DynamicJasperHelper.java:187)
at com.giivpro.services.analytics.JasperReportsService.runReport(JasperReportsService.groovy:30)

1 个答案:

答案 0 :(得分:0)

我最终意识到这不是因为我最初的想法升级到tomcat7,而是由于应用程序的部署方式发生了变化,大约在同一时间。

应用程序的所有jar文件依赖项现在都被复制到/ var / lib / tomcat / lib,而不是部署在war文件中。这意味着DynamicJasperHelper中的行

URL url = DynamicJasperHelper.class.getClassLoader().getResource(dr.getTemplateFileName());
由于ClassLoader的安全限制,

现在失败了。 / var / lib / tomcat / lib中的jar由单独的ClassLoader加载,无法从特定的WAR文件加载资源。