在Java中使用jsonql数据源的json Jasper填充报告
我们使用json数据设计了一个新的报表,其中jsonql作为查询语言,多个子报表级别在Jaspersoft studio(v6.6.0)中生成fine
我们需要一些java代码来获取生成的json数据,并在服务器上使用预编译的jasper文件创建报告,在服务器上运行jasper 6.6.0,但是当我们试图用java生成pdf时,一些子报告崩溃,说找不到要使用的数据,当我们删除这些有问题的子报告时,它会生成一个基本空白的文件,其中有1个或2个标题,并且不会显示任何相关信息/表格
InputStream jasperTemplateStream = getReportingTemplate();
JRDataSource jsonDataSource = new JsonQLDataSource(request);
JasperReport jasperReport = (JasperReport) JRLoader.loadObject(jasperTemplateStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, null, jsonDataSource);
JasperExportManager.exportReportToPdfStream(jasperPrint, response);
你知道为什么吗?我们的Jaspersoft Studio和Jasper mvn
版本是相同的
stacktrace如下所示:
net.sf.jasperreports.engine.JRRuntimeException: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("assetClasses")
...
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: ((net.sf.jasperreports.engine.data.JsonQLDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("assetClasses")
...
Caused by: net.sf.jasperreports.engine.JRException: No JSON data to operate on!
# 1 楼答案
不要将数据输入流传递给fillReport()方法,而是尝试在参数映射中传递它: