2014-03-03 39 views
0

我有一個web應用程序,它使用JasperReports將數據導出到Excel,PDF & CSV。這是一個使用DynamicJasperReports插件的Grails應用程序,它使用jrxml文件作爲報告的模板。在Tomcat下載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) 

回答

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文件加載資源。

+0

如果在AWS Ubuntu上發現字體未找到問題,請sudo apt-get install dejavu * – gabe