java ireport передавая json как выражение

Я следую этому руководству, чтобы передать JSON JRXML. мой фиктивный JSON файл разбирается в хорошо выглядящий отчет.

но у меня проблемы при передаче кода JSON в JRXML. в этом уроке есть конфигурация как на картинке ниже

источник данных

я пытался передать JSON, как это

Map<String,Object> params = new HashMap<String,Object>();

String sPath = "/reports/master_standar_test_kertas.jrxml";
URL uReport = this.getClass().getResource(sPath);

String sJson = "{\"parameter\": { \"status\":\"success\" },\"data\":[{\"kode\":\"001\",\"title\":\"ENAMEL\"}]}";
System.out.println((new JSONObject(sJson)));
InputStream is = new ByteArrayInputStream(sJson.getBytes());
JsonDataSource source = new JsonDataSource(is);

params.put(JsonQueryExecuterFactory.JSON_SOURCE, is);

JasperReport jr = JasperCompileManager.compileReport(uReport.getPath());
JasperPrint jpPrint = JasperFillManager.fillReport(jr, params,source);
JasperViewer jpView = new JasperViewer(jpPrint);

но я получил ошибку

net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: $P{net.sf.jasperreports.json.source}

мой вопрос:

  1. Я уверен, что мой код неправильный, но я не знаю точный неправильный код
  2. Я действительно хочу понять, как работает jasperreport, но я новичок в Java, что я могу прочитать в любом уроке?

2 ответа

Решение
  1. Вместо этого я бы попытался установить параметр JsonQueryExecuterFactory.JSON_INPUT_STREAM, так как он кажется именно тем, что вам нужно. Параметр JsonQueryExecuterFactory.JSON_SOURCE может быть только:

    • ресурс на пути к классам
    • файл из файловой системы с абсолютным или относительным путем
    • URL
  2. Большинство ресурсов для ознакомления с JasperReports можно найти на веб-сайте сообщества Jaspersoft. Вы можете найти полезным:

Для проблемы, которую я получил, у меня есть собственное решение, возможно, кому-то тоже нужно решение.

этот код

params.put(JsonQueryExecuterFactory.JSON_SOURCE, is);

я заменил на

params.put(JsonQueryExecuterFactory.JSON_SOURCE, "/path/to/file.json");

или заменен ответом http-сервера

params.put(JsonQueryExecuterFactory.JSON_SOURCE, "htttp://localhost:12345/data.json");
Другие вопросы по тегам