【问题标题】:Loading a jrxml file under TomcatTomcat下加载jrxml文件
【发布时间】:2014-03-03 22:30:26
【问题描述】:

我有一个网络应用程序,它使用 JasperReports 将数据导出到 Excel、PDF 和 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)

【问题讨论】:

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


    【解决方案1】:

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

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

    URL url = DynamicJasperHelper.class.getClassLoader().getResource(dr.getTemplateFileName());
    

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

    【讨论】:

    • 如果之后出现字体未找到问题,在 AWS Ubuntu 上,sudo apt-get install dejavu*
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多