使用javaflow进行子报告的Jasperreport问题

时间:2019-02-16 13:25:43

标签: java jasper-reports java-flow

根据JasperReports权威指南– Teodor Danciu,Lucian Chirita,第130页,我在JasperReports 6.7.0中使用javaflow的子报表存在问题。我需要它以避免在报告在我们的应用程序中调用时调用不同的线程,因为有价值的原因。

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:175)       在net.sf.jasperreports.components.table.fill.FillTable.prepare(FillTable.java:424)       在net.sf.jasperreports.engine.fill.JRFillComponentElement.prepare(JRFillComponentElement.java:152)       在net.sf.jasperreports.engine.fill.JRFillElementContainer.prepareElements(JRFillElementContainer.java:542)       在net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:453)       在net.sf.jasperreports.engine.fill.JRFillBand.fill(JRFillBand.java:428)       在net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2585)       在net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:813)       在net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:264)       在net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:110)       在net.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 $ RunnableWrapper.run(AsyncContextImpl.java:557)       在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)       在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624)       在java.lang.Thread.run(Thread.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:我发现,如果我们使pageHeight更大并且所有数据都适合一页,则一切正常。因此问题与第二页初始化有关

<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 个答案:

答案 0 :(得分:1)

未在JavaFlow上检测香草JasperReports jar(在Maven上发布)。

有一个罐子的变种,可以从SourceForge下载,请参阅jasperreports-javaflow-6.7.0.jar

但是该jar尚未在Maven上发布,因此您需要找到一种在构建中使用它的方法。有关某些方法,请参见this answer

答案 1 :(得分:0)

公开:我是Tascalate JavaFlow库的维护者。 看起来您在构建过程中没有检测必要的可延续类。

Tascalate Javaflow同时提供了Ant任务和Maven插件,我不确定哪种方法最适合Jasper Reports,但是您可以选择: -将Maven构建插件包含在here中。 -与此example一样设置Ant。

或者您可能在调用链上混合了可连续/不可连续方法。

此外,根据Maven Central上的信息,Jasper Reports 6.7使用Tascalate JavaFlow 2.2.1 –创建一个添加更高版本(2.4.0)的版本化地狱是一个坏主意