Проблема Jasperreport с подотчетом с использованием javaflow

У меня есть проблема с подотчетом, использующим javaflow с Jasperreport 6.7.0 в соответствии с "Полным руководством по JasperReports" - Теодор Данчу, Лучиан Чирита, стр. 130. Мне нужно, чтобы избежать вызова различных потоков, когда отчет вызывается в нашем приложении, по важным причинам,

Есть настройка на default.jasperreport.properties

net.sf.jasperreports.subreport.runner.factory=net.sf.jasperreports.engine.fill.JRContinuationSubreportRunnerFactory

И когда я запускаю свой отчет с более чем 5 строками, появляется ошибка:

java.lang.IllegalStateException: повреждение стека при приостановке (пустой стек). Инструментарий net.sf.jasperreports.engine.fill.JRContinuationSubreportRunner@2024896527/org.apache.catalina.loader.WebappClassLoader@1847497893 предназначен для javaflow? в org.apache.commons.javaflow.core.StackRecorder.execute(StackRecorder.java:131) в org.apache.commons.javaflow.api.Continuation$MultiShotContinuation.resumeWith(Continuation.java:521) в org.apache.commons.javaflow.api.Continuation.resume(Continuation.java:314) в org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:219) в org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:169) по адресу org.apache.commons.javaflow.api.Continuation.startWith(Continuation.java:148) по адресу net.sf.jasperreports.engine.fill.JRContinuationSubreportRunner.start(JRContinuationSubreportRunner.java:53).NET.sf.jasperreports.engine.fill.JRFillSubreport.prepare(JRFillSubreport.java:931) в net.sf.jasperreports.components.table.fill.FillTableSubreport.prepareSubreport(FillTableSubreport.java:1jjasreport.java:1j) в net.sf.components.table.fill.FillTable.prepare(FillTable.java:424) в net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:152) at net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:542) в net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:453) в net.sf.jasperreports.fill..java:813) по адресу net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:264) по адресу net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:110).sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:615) на net.sf.jasperreports.engine.fill.BaseReportFiller.fill(BaseReportFiller.java:413) на net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:120) в net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:103) в org.wgsoftpro.reposerver.SetReport.fillReport(SetReport.java:469) в org.wgsoftpro.reposerver.SetReport.runReport(SetReport.java:190) в org.wgsoftpro.reposerver.CreateReport.run(CreateReport.java:454) в org.apache.catalina.core.AsyncContextImpl$RunnunWyn.java:557) на java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) на java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) на java.runTh..java:748)

Если строк меньше, отчет запускается без проблем.

У меня есть зависимость в pom.xml, чтобы получить org.apache.commons.javaflow.api

<dependency>
    <groupId>net.tascalate.javaflow</groupId>
    <artifactId>net.tascalate.javaflow.api</artifactId>
    <version>2.4.0</version>
</dependency>

Любое предложение будет оценено.

ОБНОВЛЕНИЕ: я получил ту же ошибку с net.tascalate.javaflow.api версии 2.2.1

ОБНОВЛЕНИЕ 2: Я обнаружил, что если мы увеличим высоту страницы и все данные уместятся на одной странице, все будет работать. Так что проблема связана с инициализацией второй страницы

<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="vetmed" language="javascript" pageWidth="595" ***pageHeight="1500"*** columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="c2935bae-a905-4770-8aca-21bb3b76afde">

2 ответа

Ванильный JasperReports jar (опубликованный на Maven) не предназначен для JavaFlow.

Существует вариант jar, который можно скачать с SourceForge, см. Jasperreports-javaflow-6.7.0.jar

Но этот файл не публикуется в Maven, поэтому вам нужно найти способ использовать его в своей сборке. Посмотрите этот ответ для некоторых способов сделать это.

Раскрытие информации: я поддерживаю библиотеку Tascalate JavaFlow. Похоже, вы не использовали необходимые продолжающиеся классы во время сборки.

Tascalate Javaflow предоставляет как задачу Ant, так и плагин Maven, я не уверен, что лучше всего работает с Jasper Reports, но у вас есть: - включить плагин сборки Maven, как описано здесь. - настроить Ant как в этом примере.

Или, возможно, у вас есть смесь продолжаемых / непродолжаемых методов в цепочке вызовов.

Кроме того, согласно информации о Maven Central, Jasper Reports 6.7 использует Tascalate JavaFlow 2.2.1 - плохая идея - создать ад контроля версий с добавлением более высокой версии (2.4.0).

Другие вопросы по тегам