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:
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?