JasperReport java.util.NoSuchElementException

时间:2014-08-22 16:56:39

标签: java jasper-reports

我有一个奇怪的问题。我有一份包含大量数据的报告。当我按特定日期或短期日期请求报告时,报告会正常显示,但当我按大范围请求报告时,此异常会抛出: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)

1 个答案:

答案 0 :(得分:1)

我真的希望我可以问你一些问题,但我的低信誉评分阻止了这一点。但由于已经过了2个小时并且您没有收到任何回复,我冒着冒犯其他成员的风险并提供此信息:

可能存在一些格式错误的XML,只有在您处理"巨大的"文件。在您运行的所有小文件(或大文件的一小部分)中,您很幸运,不会遇到不良数据。我会做以下(或全部)之一:

  1. 分而治之。只处理巨大文件的前半部分。如果成功,则只处理巨大文件的后半部分。据推测,这将失败。然后将此后半部分分成两部分。最终,您将缩小格式错误的大块数据。找到后,检查整个文件是否存在类似情况。

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

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

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