【问题标题】:NullPointerException while using RunningCount Aggregation with Engine API将 RunningCount 聚合与 Engine API 一起使用时出现 NullPointerException
【发布时间】:2012-01-03 11:06:09
【问题描述】:

我正在尝试升级我的应用程序以使用 BIRT 3.7.1 版本。目前我使用的是 2.6.0 版本。

我正在使用最新的稳定版本 3.7.1。

在我的测试过程中,我遇到了一个使用序列号(RunningCount 聚合)的报告的异常。当我将报表与 Report Engine API 一起使用时会出现此异常,如果我使用 Web 查看器,则报表工作正常。

我附上了一个小测试用例来重现这个问题。这包括报告设计文件和我使用 ReportEngine 生成报告的类。

请在下面找到错误日志:

Jan 3, 2012 4:34:42 PM org.eclipse.birt.report.engine.api.impl.RunAndRenderTask doRun
SEVERE: An error happened while running the report. Cause:
java.lang.NullPointerException
    at org.eclipse.birt.core.util.IOUtil.writeInt(IOUtil.java:226)
    at org.eclipse.birt.core.util.IOUtil.writeObject(IOUtil.java:674)
    at org.eclipse.birt.data.engine.executor.transform.SimpleGroupCalculator.next(SimpleGroupCalculator.java:233)
    at org.eclipse.birt.data.engine.executor.transform.SimpleResultSet.next(SimpleResultSet.java:562)
    at org.eclipse.birt.data.engine.executor.transform.ResultSetWrapper.next(ResultSetWrapper.java:81)
    at org.eclipse.birt.data.engine.impl.ResultIterator.hasNextRow(ResultIterator.java:584)
    at org.eclipse.birt.data.engine.impl.ResultIterator.nextRow(ResultIterator.java:525)
    at org.eclipse.birt.data.engine.impl.ResultIterator.next(ResultIterator.java:475)
    at org.eclipse.birt.report.engine.data.dte.QueryResultSet.next(QueryResultSet.java:191)
    at org.eclipse.birt.report.engine.executor.ListingElementExecutor.hasNextChild(ListingElementExecutor.java:244)
    at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.hasNextChild(WrappedReportItemExecutor.java:86)
    at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.hasNextChild(WrappedReportItemExecutor.java:86)
    at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:62)
    at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26)
    at org.eclipse.birt.report.engine.layout.html.HTMLTableLM.layoutChildren(HTMLTableLM.java:132)
    at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140)
    at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70)
    at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:92)
    at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:100)
    at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:180)
    at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77)
    at com.eclipse.birt.test.RunningCountFieldTest.main(RunningCountFieldTest.java:52)
Exception in thread "main" org.eclipse.birt.report.engine.api.EngineException: Error happened while running the report.
    at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:196)
    at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.run(RunAndRenderTask.java:77)
    at com.eclipse.birt.test.RunningCountFieldTest.main(RunningCountFieldTest.java:52)
Caused by: java.lang.NullPointerException
    at org.eclipse.birt.core.util.IOUtil.writeInt(IOUtil.java:226)
    at org.eclipse.birt.core.util.IOUtil.writeObject(IOUtil.java:674)
    at org.eclipse.birt.data.engine.executor.transform.SimpleGroupCalculator.next(SimpleGroupCalculator.java:233)
    at org.eclipse.birt.data.engine.executor.transform.SimpleResultSet.next(SimpleResultSet.java:562)
    at org.eclipse.birt.data.engine.executor.transform.ResultSetWrapper.next(ResultSetWrapper.java:81)
    at org.eclipse.birt.data.engine.impl.ResultIterator.hasNextRow(ResultIterator.java:584)
    at org.eclipse.birt.data.engine.impl.ResultIterator.nextRow(ResultIterator.java:525)
    at org.eclipse.birt.data.engine.impl.ResultIterator.next(ResultIterator.java:475)
    at org.eclipse.birt.report.engine.data.dte.QueryResultSet.next(QueryResultSet.java:191)
    at org.eclipse.birt.report.engine.executor.ListingElementExecutor.hasNextChild(ListingElementExecutor.java:244)
    at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.hasNextChild(WrappedReportItemExecutor.java:86)
    at org.eclipse.birt.report.engine.internal.executor.wrap.WrappedReportItemExecutor.hasNextChild(WrappedReportItemExecutor.java:86)
    at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:62)
    at org.eclipse.birt.report.engine.layout.html.HTMLStackingLM.layoutChildren(HTMLStackingLM.java:26)
    at org.eclipse.birt.report.engine.layout.html.HTMLTableLM.layoutChildren(HTMLTableLM.java:132)
    at org.eclipse.birt.report.engine.layout.html.HTMLAbstractLM.layout(HTMLAbstractLM.java:140)
    at org.eclipse.birt.report.engine.layout.html.HTMLBlockStackingLM.layoutNodes(HTMLBlockStackingLM.java:70)
    at org.eclipse.birt.report.engine.layout.html.HTMLPageLM.layout(HTMLPageLM.java:92)
    at org.eclipse.birt.report.engine.layout.html.HTMLReportLayoutEngine.layout(HTMLReportLayoutEngine.java:100)
    at org.eclipse.birt.report.engine.api.impl.RunAndRenderTask.doRun(RunAndRenderTask.java:180)
    ... 2 more

您可以在GitHub 中找到重新创建问题的示例程序。

请帮我解决这个问题。

【问题讨论】:

    标签: birt


    【解决方案1】:

    我通过分离Report Engine APIrunrender 任务来解决这个问题。

    不要使用IRunAndRenderTask task = engine.createRunAndRenderTask(design);,而是分别运行IRunTask runTask = engine.createRunTask(design);IRenderTask renderTask = engine.createRenderTask(iReportDocument);

    【讨论】:

      猜你喜欢
      • 2018-10-07
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      • 2018-07-24
      • 1970-01-01
      • 2020-11-17
      • 2021-12-28
      • 2012-09-18
      相关资源
      最近更新 更多