繁体   English   中英

在Java中使用jsonql数据源进行Jasper填充报告

[英]Jasper fill report using jsonql datasource in Java

我们使用jsonql作为查询语言和多个子报表级别设计了一个使用json数据的新报表,该报表在Jaspersoft Studio(v6.6.0)中生成的效果很好。

我们需要一些Java代码来获取生成的json数据,并使用服务器上运行Jasper 6.6.0的服务器上已预编译的jasper文件创建报告,但是,当我们尝试在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!

而不是将数据输入流传递给fillReport()方法,而是尝试通过参数映射传递它:

Map<String, Object> params = new HashMap<>();
params.put(JsonQLQueryExecuterFactory.JSON_INPUT_STREAM, request);
JasperReport jasperReport = (JasperReport) 
JRLoader.loadObject(jasperTemplateStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, params);
JasperExportManager.exportReportToPdfStream(jasperPrint, response);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM