Я тестирую JasperReports с данными JSON и сталкиваюсь с проблемой, когда нулевые значения отображаются при генерации из приложения Java. Вот что я сделал до сих пор:
В Studio я создал отчет, который использует JSON Файловый провайдер данных, используя файл, содержащий следующее JSON:
{
"employees": [
{
"fullname":"John Stark",
"employeeid":"29388282773",
"phone":"415-293-2928"
},
{
"fullname":"Mike Goodmann",
"employeeid":"2938828282",
"phone":"415-293-2726"
},
{
"fullname":"David Simpson",
"employeeid":"2938822837",
"phone":"415-293-9826"
},
{
"fullname":"Chris Humpty",
"employeeid":"2938275452",
"phone":"415-293-1122"
}
]
}
Вот полученный файл jr xml:
<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 7.1.0.final using JasperReports Library version 6.4.3 -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="testreport" pageWidth="792" pageHeight="612" orientation="Landscape" columnWidth="752" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" >
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="testdata"/>
<queryString language="json">
<![CDATA[employees]]>
</queryString>
<field name="fullname" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="fullname"/>
<fieldDescription><![CDATA[fullname]]></fieldDescription>
</field>
<field name="employeeid" class="java.lang.Long">
<property name="net.sf.jasperreports.json.field.expression" value="employeeid"/>
<fieldDescription><![CDATA[employeeid]]></fieldDescription>
</field>
<field name="phone" class="java.lang.String">
<property name="net.sf.jasperreports.json.field.expression" value="phone"/>
<fieldDescription><![CDATA[phone]]></fieldDescription>
</field>
<title>
<band height="79" splitType="Stretch">
<staticText>
<reportElement x="240" y="24" width="280" height="30" />
<text><![CDATA[Employee List]]></text>
</staticText>
</band>
</title>
<columnHeader>
<band height="65" splitType="Stretch">
<staticText>
<reportElement x="30" y="30" width="180" height="30" />
<text><![CDATA[Full Name]]></text>
</staticText>
<staticText>
<reportElement x="240" y="30" width="160" height="30" />
<text><![CDATA[Employee Id]]></text>
</staticText>
<staticText>
<reportElement x="430" y="30" width="180" height="30" />
<text><![CDATA[Phone Number]]></text>
</staticText>
<staticText>
<reportElement x="299" y="0" width="100" height="30" />
<text><![CDATA[employeeid]]></text>
</staticText>
<staticText>
<reportElement x="468" y="0" width="100" height="30" />
<text><![CDATA[phone]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="24" splitType="Stretch">
<textField>
<reportElement x="30" y="0" width="180" height="20" />
<textFieldExpression><![CDATA[$F{fullname}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="241" y="0" width="159" height="20" />
<textFieldExpression><![CDATA[$F{employeeid}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="430" y="0" width="180" height="20" />
<textFieldExpression><![CDATA[$F{phone}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
Затем написал простое консольное приложение для генерации отчета в PDF, но я получил одну строку со значениями NULL. Вы заметите, что я встраивал JSON в класс, чтобы упростить тестовый код, пока я не заставлю его работать правильно, и что я действительно передаю данные JSON в вызов "JasperFillManager.fillReport ()". Вот мой Java код:
public class ReportTester {
String jsonData = "{\n" +
" \"employees\": [\n" +
" {\n" +
" \"fullname\":\"John Stark\",\n" +
" \"employeeid\":\"29388282773\",\n" +
" \"phone\":\"415-293-2928\"\n" +
" },\n" +
" {\n" +
" \"fullname\":\"Mike Goodmann\",\n" +
" \"employeeid\":\"2938828282\",\n" +
" \"phone\":\"415-293-2726\"\n" +
" },\n" +
" {\n" +
" \"fullname\":\"David Simpson\",\n" +
" \"employeeid\":\"2938822837\",\n" +
" \"phone\":\"415-293-9826\"\n" +
" },\n" +
" {\n" +
" \"fullname\":\"Chris Humpty\",\n" +
" \"employeeid\":\"2938275452\",\n" +
" \"phone\":\"415-293-1122\"\n" +
" }\n" +
" ]\n" +
"}";
String reportFile = "/testreport.jrxml";
String outputPdf = "testreport.pdf";
JasperReport jasperReport;
public void printme() {
try {
InputStream employeeReportStream = getClass().getResourceAsStream(reportFile);
jasperReport = JasperCompileManager.compileReport(employeeReportStream);
ByteArrayInputStream jsonDataStream = new ByteArrayInputStream(jsonData.getBytes());
JsonDataSource ds = new JsonDataSource(jsonDataStream);
JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, new HashMap<String, Object>(), ds);
JRPdfExporter exporter = new JRPdfExporter();
exporter.setExporterInput(new SimpleExporterInput(jasperPrint));
exporter.setExporterOutput(new SimpleOutputStreamExporterOutput(outputPdf));
SimplePdfReportConfiguration reportConfig = new SimplePdfReportConfiguration();
reportConfig.setSizePageToContent(true);
reportConfig.setForceLineBreakPolicy(false);
exporter.setConfiguration(reportConfig);
exporter.exportReport();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Может кто-нибудь помочь указать, что с этим не так и почему отчет не генерируется с данными?