0

JasperReportsを使用してデータを Excel、PDF、CSV にエクスポートするWeb アプリがあります。これは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)
4

1 に答える 1

0

最終的に、これは当初考えていた tomcat7 へのアップグレードによるものではなく、アプリの展開方法の変更によるものであることに気付きました。

アプリのすべての jar ファイルの依存関係は、war ファイル内にデプロイされるのではなく、/var/lib/tomcat/lib にコピーされるようになりました。つまり、DynamicJasperHelper の行は

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

ClassLoader のセキュリティ制限により失敗しました。/var/lib/tomcat/lib の jar は別の ClassLoader によってロードされ、特定の WAR ファイルからリソースをロードできません。

于 2014-03-03T22:30:26.787 に答える