简体   繁体   中英

Jasper fill report using jsonql datasource in Java

We designed a new report using json data with jsonql as the query language and multiple sub report levels that generates fine in Jaspersoft studio (v6.6.0).

We need some java code to take the generated json data and create a report using precompiled jasper files on server, running Jasper 6.6.0 on server, however when we try to generate the pdf's in java, some sub reports crash saying it cant find the data to use and when we remove those problematic sub reports, it generates a mostly blank file with 1 or 2 headings and no relevant information/tables are shown.

    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);

Any ideas as to why? Our Jaspersoft Studio and Jasper mvn versions are the same.

The stacktrace is as follows:

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!

Instead of passing the data input stream to the fillReport() method, try passing it through in the parameter map instead:

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);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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