cuba-platform / reports

CUBA Reports Addon
https://www.cuba-platform.com/
Apache License 2.0
9 stars 4 forks source link

CrossTabExtractionController fails with NullPointerException if no data provided #238

Closed longirun closed 4 years ago

longirun commented 4 years ago
java.lang.NullPointerException: null
        at java.base/java.util.ImmutableCollections$MapN.probe(ImmutableCollections.java:926) ~[na:na]
        at java.base/java.util.ImmutableCollections$MapN.get(ImmutableCollections.java:846) ~[na:na]
        at com.haulmont.yarg.reporting.extraction.controller.CrossTabExtractionController.lambda$traverseData$12(CrossTabExtractionController.java:108) ~[yarg-2.1.6.jar:na]
        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[na:na]
        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1654) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[na:na]
        at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[na:na]
        at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[na:na]
        at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[na:na]
        at com.haulmont.yarg.reporting.extraction.controller.CrossTabExtractionController.traverseData(CrossTabExtractionController.java:112) ~[yarg-2.1.6.jar:na]
        at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.extract(DefaultExtractionController.java:63) ~[yarg-2.1.6.jar:na]
        at com.haulmont.yarg.reporting.DataExtractorImpl.createBands(DataExtractorImpl.java:99) ~[yarg-2.1.6.jar:na]
        at com.haulmont.yarg.reporting.DataExtractorImpl.extractData(DataExtractorImpl.java:71) ~[yarg-2.1.6.jar:na]
        at com.haulmont.yarg.reporting.Reporting.loadBandData(Reporting.java:143) ~[yarg-2.1.6.jar:na]
        at com.haulmont.yarg.reporting.Reporting.runReport(Reporting.java:99) ~[yarg-2.1.6.jar:na]
        at com.haulmont.yarg.reporting.Reporting.runReport(Reporting.java:83) ~[yarg-2.1.6.jar:na]
        at com.haulmont.reports.ReportingBean.createReportDocument(ReportingBean.java:346) ~[reports-core-7.1.0.jar:7.1.0]
        at com.haulmont.reports.ReportingBean.createReportDocument(ReportingBean.java:315) ~[reports-core-7.1.0.jar:7.1.0]
        at com.haulmont.reports.ReportingBean.createReport(ReportingBean.java:301) ~[reports-core-7.1.0.jar:7.1.0]
        at org.tgrealestate.service.realestate.ExportServiceImp.exportToExcel(ExportServiceImp.java:87) ~[tgrealestate-core-0.1-SNAPSHOT.jar:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:343) ~[spring-aop-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:198) ~[spring-aop-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:88) ~[spring-aop-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at com.haulmont.cuba.core.sys.ServiceInterceptor.aroundInvoke(ServiceInterceptor.java:116) ~[cuba-core-7.1.2.jar:7.1.2]
...

Environment

com.haulmont.reports: 7.1.0

Description of the bug

Dataset for Band apartments is empty, Datasets for Bands apartments_dynamic_header and apartments_master_data not empty.

Report is attached, pls find GridExportReport.zip

To reproduce the issue, do following:

  1. Edit -> Root -> apartments -> Bands
  2. Replace Band apartments returning value
    return AppBeans.get('tgrealestate_GridExportReportService')
               .getApartmentsRowData(realtyObject, manager, developer, contractor)

    with return []

Replace Band apartments_dynamic_header returning value

return AppBeans.get('tgrealestate_GridExportReportService')
               .getApartmentsDynamicHeaderRowData(realtyObject, manager, developer, contractor)

with return [['roomNum': '']] Replace Band apartments_master_data returning value

return AppBeans.get('tgrealestate_GridExportReportService')
               .getFloorNumbers(realtyObject, manager, developer, contractor)

with return [['floorNum': '']]

  1. Run report.

AR: NullPointerException ER: xlsx file generated

Please find possible fix in attached overriden file TgCrossTabExtractionController.zip

GridExportReport.zip

TgCrossTabExtractionController.zip