cuba-platform / yarg

Yet Another Report Generator - CUBA Platform reporting engine
https://www.cuba-platform.com
Apache License 2.0
239 stars 75 forks source link

Avoiding Groovy string length max size #171

Open johnny-the-t opened 1 year ago

johnny-the-t commented 1 year ago

Hi! While generating a report, we load data through groovy script. And sometimes our template contains script with too big string length for Groovy (65535+ units). We handled it with splitting string in several parts in com.haulmont.yarg.loaders.impl.GroovyDataLoader and then joining them in runtime, but is there a more beautiful way to solve this problem?

2022-08-01 05:35:29.761 INFO [main] com.haulmont.yarg.reporting.Reporting - Trace: com.haulmont.yarg.exception.DataLoadingException: An error occurred while loading data for band [Main] and query [Main]. at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.getQueryData(DefaultExtractionController.java:214) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.getQueriesResult(DefaultExtractionController.java:151) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.getQueriesResult(DefaultExtractionController.java:144) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.extractData(DefaultExtractionController.java:76) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.extract(DefaultExtractionController.java:62) at com.haulmont.yarg.reporting.DataExtractorImpl.createBands(DataExtractorImpl.java:99) at com.haulmont.yarg.reporting.DataExtractorImpl.extractData(DataExtractorImpl.java:71) at com.haulmont.yarg.reporting.Reporting.loadBandData(Reporting.java:144) at com.haulmont.yarg.reporting.Reporting.runReport(Reporting.java:92) at com.haulmont.yarg.console.ConsoleRunner.main(ConsoleRunner.java:74) Caused by: com.haulmont.yarg.exception.DataLoadingException: An error occurred while loading data for data set [Main] at com.haulmont.yarg.loaders.impl.GroovyDataLoader.loadData(GroovyDataLoader.java:52) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.lambda$getQueryData$1(DefaultExtractionController.java:206) at com.haulmont.yarg.reporting.extraction.DefaultPreprocessorFactory.lambda$new$0(DefaultPreprocessorFactory.java:35) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.getQueryData(DefaultExtractionController.java:204) ... 9 common frames omitted Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: Script1.groovy: 17: String too long. The given string is 66178 Unicode code units long, but only a maximum of 65535 is allowed. @ line 17, column 16. 'allVariables':'{/ 65535+ long string here /}', ^

1 error

at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310) at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268) at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688) at groovy.lang.GroovyShell.parse(GroovyShell.java:700) at groovy.lang.GroovyShell.evaluate(GroovyShell.java:584) at groovy.lang.GroovyShell.evaluate(GroovyShell.java:623) at groovy.lang.GroovyShell.evaluate(GroovyShell.java:594) at com.haulmont.yarg.util.groovy.DefaultScriptingImpl.evaluateGroovy(DefaultScriptingImpl.java:29) at com.haulmont.yarg.loaders.impl.GroovyDataLoader.loadData(GroovyDataLoader.java:50) ... 12 common frames omitted com.haulmont.yarg.exception.DataLoadingException: An error occurred while loading data for band [Main] and query [Main]. Report name [report] at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.getQueryData(DefaultExtractionController.java:214) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.getQueriesResult(DefaultExtractionController.java:151) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.getQueriesResult(DefaultExtractionController.java:144) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.extractData(DefaultExtractionController.java:76) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.extract(DefaultExtractionController.java:62) at com.haulmont.yarg.reporting.DataExtractorImpl.createBands(DataExtractorImpl.java:99) at com.haulmont.yarg.reporting.DataExtractorImpl.extractData(DataExtractorImpl.java:71) at com.haulmont.yarg.reporting.Reporting.loadBandData(Reporting.java:144) at com.haulmont.yarg.reporting.Reporting.runReport(Reporting.java:92) at com.haulmont.yarg.console.ConsoleRunner.main(ConsoleRunner.java:74) Caused by: com.haulmont.yarg.exception.DataLoadingException: An error occurred while loading data for data set [Main] at com.haulmont.yarg.loaders.impl.GroovyDataLoader.loadData(GroovyDataLoader.java:52) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.lambda$getQueryData$1(DefaultExtractionController.java:206) at com.haulmont.yarg.reporting.extraction.DefaultPreprocessorFactory.lambda$new$0(DefaultPreprocessorFactory.java:35) at com.haulmont.yarg.reporting.extraction.controller.DefaultExtractionController.getQueryData(DefaultExtractionController.java:204) ... 9 more Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: