【问题标题】:JasperReport java.util.NoSuchElementExceptionJasperReport java.util.NoSuchElementException
【发布时间】:2014-08-25 12:50:04
【问题描述】:

我有一个奇怪的问题。我有一份包含大量数据的报告。当我按特定日期或短范围日期请求报告时,报告正常显示,但是当我按大范围请求报告时,会抛出此异常:java.util.NoSuchElementException

我认为可能是数据源 (XML),但是当我将数据源更改为 JSON 时,问题仍然存在。有什么想法吗?

PD:当我在 iReport 上运行报告时,一切正常。 :(

JasperReports 版本是 5.6.0
Java JDK 7

完全的例外:

java.util.NoSuchElementException
at java.util.AbstractList$Itr.next(Unknown Source)
at net.sf.jasperreports.engine.fill.JRPrintBand$ElementsIterator.next(JRPrintBand.java:151)
at net.sf.jasperreports.engine.fill.JRPrintBand$ElementsIterator.next(JRPrintBand.java:1)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillBand(JRVerticalFiller.java:2136)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2090)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:788)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:298)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:152)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:963)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:892)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:114)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:584)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:930)
at ibusplus.com.reportRequest.clases.ReportExport.getJasperPrint(ReportExport.java:208)
at ibusplus.com.reportRequest.clases.ReportExport.getJasperPrint(ReportExport.java:192)
at ibusplus.com.reportRequest.clases.ReportExport.getURLReport(ReportExport.java:274)
at org.apache.jsp.reportGenerator_jsp._jspService(reportGenerator_jsp.java:151)

【问题讨论】:

    标签: java jasper-reports


    【解决方案1】:

    我真希望我能问你一些问题,但我的低声誉分数阻止了这一点。但既然已经2小时了,你还没有收到回复,我冒着冒犯其他会员的风险提供这个:

    很可能存在一些格式错误的 XML,只有在您处理“巨大”文件时才会被读取。在您运行的所有小文件(或大文件的一小部分)中,您很幸运没有遇到坏数据。我会做以下其中一项(或全部):

    1. 分而治之。仅处理大文件的前半部分。如果成功,则仅处理大文件的后半部分。估计会失败。然后像以前一样将下半部分分成两部分。最终,您将缩小一小部分格式错误的大量数据。找到此内容后,请检查整个文件是否存在类似情况。

    2. 如果存在描述 XML 的 DTD 或 XSD,我将完全在任何 Jasper 代码或进程之外根据该 DTD 或 XSD 验证整个 XML 文件。使用独立的、基于 SAX 的验证器。

    3. 如果没有 DTD 或 XSD,那么我会使用 XSD 生成工具并生成 XSD(您可以使用 Microsoft 的 XSD.exe,它包含在他们的 Windows 操作系统中——只需查找它)。这将从 actual XML 生成 XSD。获得 XSD 后,请查看它,看看是否有任何意外元素。例如。您可能有一个您熟悉的名为Invoices 的元素。如果您看到 Invioces 的元素定义(切换了 i 和 o),您可能已经找到了罪魁祸首。

    4. 另请参阅Data Source from string。在这篇文章中,我建议对 Datasource 对象进行包装,以便您可以实时查看 Jasper 正在检索的内容。

    【讨论】:

    • 感谢您的回复。好吧,我意识到当我删除细节带的任何字段时,报告显示没有问题:S 这让我更加困惑,因为细节带上可能存在字段限制:(
    • 您对 jasper 报告有所了解,我真的需要帮助。再次感谢您的回复。我会努力付诸实践的
    • 也许异常与您的 .jrxml 文件有关,而不是与报告输入的巨大 XML 文件有关?也许报告定义引用了报告定义中缺少的元素(或拼写不同)。
    • 你认为这会引发 java.util.NoSuchElementException 吗?因为当迭代器上没有下一个元素时会引发。我验证了 xml 文件输入,一切正常。我不知道发生了什么
    • 嗯,不。在仔细检查您的堆栈后,我认为这是我的错误建议。我从堆栈中看到该报告是作为 Web 调用的一部分生成的,并且您提到从 iReports 运行该报告时工作正常。这是一个线索,因为代码不同(尽管有些代码可能很常见)。 Apache 调用的 Jasper 库是否与 iReports 使用的库相同?您是否在任何地方使用最新版本的库?如果 Apache 有较旧的库,请尝试将它们替换为最新的。
    猜你喜欢
    • 2018-02-11
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多