This part sounds potentially dangerous to me:
We develop an OSGI Eclipse E4 based application which is written in a combination of Java and Groovy. The application makes use of Groovy templates dynamically loaded at runtime (to facilitate providing HTML reports) and provides provision for the user to provide Groovy scripts which are parsed and run by a GroovyShell at runtime. Is this user provided Groovy shell code somehow isolated from application code ? If not that sounds dangerous to me, and can cause unexpected side effects. Or are all users experienced developers with deep understanding of the application? Even if so I'm skeptical. BR / Tommy ______________________ Tommy Svensson to...@natusoft.se On 10 Mar 2025 at 08:59 +0100, Richard Harker <richard.har...@cytal.co.uk>, wrote: > Hi All. > > We develop an OSGI Eclipse E4 based application which is written in a > combination of Java and Groovy. The application makes use of Groovy templates > dynamically loaded at runtime (to facilitate providing HTML reports) and > provides provision for the user to provide Groovy scripts which are parsed > and run by a GroovyShell at runtime. > > For some time now we’ve been seeing issues with intermittent stack overflow > exceptions and intermittent hangs - both when the application loads the > Groovy templates and when the application compiles the Groovy scripts. > > The stack overflow exceptions appear to be originating from Groovy and given > the hangs appear to occur interchangeably for the stack overflow exceptions, > our suspicion is that the hangs are potentially a different manifestation of > the same underlying issue. > > We’ve been using Groovy for some years, and when we were on Groovy 2.5.x did > not see these issues at all. We see them on both Groovy 3.x and on 4.x, with > them seemingly being more frequent on Groovy 4.x. > > Has anyone else seen these types of issues? I’ve included two example stack > traces below. I’ve truncated each stack trace in the middle of the repeating > lines, so the email is not huge. > > > > Example stack trace 1 – from when we saw the Stack Overflow Exception with > latest Groovy (4.0.26), when the Groovy Shell parses a Groovy script. > > !ENTRY com.protocrawler.jstdlib.core 4 0 2025-03-04 09:17:15.877 > !MESSAGE FrameworkEvent ERROR > !STACK 0 > java.lang.StackOverflowError > at java.base/java.lang.String.startsWith(String.java:2327) > at > java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:97) > at > java.base/sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) > at java.base/sun.nio.fs.WindowsPath.parse(WindowsPath.java:92) > at > java.base/sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:231) > at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1445) > at > java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:724) > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:251) > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:180) > at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:194) > at > org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:353) > at > org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile.java:51) > at > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(CloseableBundleFile.java:146) > at > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(CloseableBundleFile.java:83) > at > org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(CloseableBundleFile.java:285) > at > org.eclipse.osgi.storage.bundlefile.BundleFile.getResourceURL(BundleFile.java:147) > at > org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.findResource(ClasspathEntry.java:228) > at > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:462) > at > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResourceImpl(ClasspathManager.java:441) > at > org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findLocalResource(ClasspathManager.java:412) > at > org.eclipse.osgi.internal.loader.ModuleClassLoader.findLocalResource(ModuleClassLoader.java:340) > at > org.eclipse.osgi.internal.loader.BundleLoader.findLocalResource(BundleLoader.java:952) > at > org.eclipse.osgi.internal.loader.sources.SingleSourcePackage.getResource(SingleSourcePackage.java:46) > at > org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:710) > at > org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212) > at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413) > at > org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:252) > at > org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:193) > at > org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:175) > at > org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:129) > at > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57) > at > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:113) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > > <<removed ~900 lines to make the email shorter>> > > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:111) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:35) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:189) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:148) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:125) > > > > > Example 2 – The stack overflow seen with Groovy 3.0.23 when parsing one of > our TPL template files: > > OpenJDK 64-Bit Server VM warning: Potentially dangerous stack overflow in > ReservedStackAccess annotated method > java.util.concurrent.locks.ReentrantReadWriteLock$Sync.tryAcquireShared(I)I > [1] > [ERROR] Unhandled HTML reporter exception > java.lang.IllegalStateException: Unexpected error loading template PacketTrace > at > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:115) > at > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateManagementService(TemplateManagementService.java:51) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318) > at > com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.initialSetup(MultiFileTestExecutionHTMLReporter.groovy:173) > at > com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.super$2$initialSetup(HTMLAnalysisReporter.groovy) > at > java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) > at java.base/java.lang.reflect.Method.invoke(Method.java:580) > at > org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:107) > at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:323) > at groovy.lang.MetaClassImpl.invokeMethod(MetaClassImpl.java:1254) > at > org.codehaus.groovy.runtime.ScriptBytecodeAdapter.invokeMethodOnSuperN(ScriptBytecodeAdapter.java:144) > at > com.protocrawler.pts.core.jtf.analysis.reporting.html.HTMLAnalysisReporter.initialSetup(HTMLAnalysisReporter.groovy:94) > at > org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:318) > at > com.protocrawler.jtf.reporting.testexecution.html.MultiFileTestExecutionHTMLReporter.generateReport(MultiFileTestExecutionHTMLReporter.groovy:98) > at > com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:219) > at > com.protocrawler.jtf.reporting.testexecution.html.cmdln.HTMTestExecutionReport.performCommand(HTMTestExecutionReport.java:36) > at > com.protocrawler.jstdlib.emfcore.cmdline.EMFSettingsCommandLineCommand.performCommand(EMFSettingsCommandLineCommand.java:111) > at > com.protocrawler.jstdlib.applications.cmdln.DefaultEclipseRCPCommandLineApplication.start(DefaultEclipseRCPCommandLineApplication.java:126) > at > org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208) > at > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143) > at > org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109) > at > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439) > at > org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271) > at > java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) > at java.base/java.lang.reflect.Method.invoke(Method.java:580) > at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668) > at org.eclipse.equinox.launcher.Main.basicRun(Main.java:605) > at org.eclipse.equinox.launcher.Main.run(Main.java:1481) > at org.eclipse.equinox.launcher.Main.main(Main.java:1454) > Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: > startup failed: > General error during canonicalization: Requesting upgrade to write lock. > > java.lang.IllegalMonitorStateException: Requesting upgrade to write lock. > at > org.eclipse.osgi.container.ModuleDatabase.writeLock(ModuleDatabase.java:840) > at > org.eclipse.osgi.container.ModuleContainer.applyDelta(ModuleContainer.java:984) > at > org.eclipse.osgi.container.ModuleContainer.resolveDynamic(ModuleContainer.java:835) > at > org.eclipse.osgi.internal.loader.BundleLoader.findDynamicSource(BundleLoader.java:1269) > at > org.eclipse.osgi.internal.loader.BundleLoader.findResource(BundleLoader.java:729) > at > org.eclipse.osgi.internal.loader.ModuleClassLoader.getResource(ModuleClassLoader.java:212) > at java.base/java.lang.ClassLoader.getResource(ClassLoader.java:1413) > at > org.codehaus.groovy.control.ClassNodeResolver.findDecompiled(ClassNodeResolver.java:248) > at > org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:189) > at > org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:169) > at > org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:125) > at > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClassNullable(AsmReferenceResolver.java:57) > at > org.codehaus.groovy.ast.decompiled.AsmReferenceResolver.resolveClass(AsmReferenceResolver.java:44) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:102) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > > <<removed ~900 lines to make the email shorter>> > > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.parseClassSignature(ClassSignatureParser.java:74) > at > org.codehaus.groovy.ast.decompiled.ClassSignatureParser.configureClass(ClassSignatureParser.java:32) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.lazyInitSupers(DecompiledClassNode.java:163) > at > org.codehaus.groovy.ast.decompiled.DecompiledClassNode.getGenericsTypes(DecompiledClassNode.java:128) > at > org.codehaus.groovy.ast.decompiled.TypeSignatureParser.visitEnd(TypeSignatureParser.java:114) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:206) > at > groovyjarjarasm.asm.signature.SignatureReader.parseType(SignatureReader.java:240) > at > groovyjarjarasm.asm.signature.SignatureReader.accept(SignatureReader.java:124) > > 1 error > > at > org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:292) > at > org.codehaus.groovy.control.ErrorCollector.addException(ErrorCollector.java:140) > at > org.codehaus.groovy.control.CompilationUnit$IPrimaryClassNodeOperation.doPhaseOperation(CompilationUnit.java:977) > at > org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:672) > at > org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:636) > at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:392) > at > groovy.lang.GroovyClassLoader.lambda$parseClass$3(GroovyClassLoader.java:335) > at > org.codehaus.groovy.runtime.memoize.StampedCommonCache.compute(StampedCommonCache.java:163) > at > org.codehaus.groovy.runtime.memoize.StampedCommonCache.getAndPut(StampedCommonCache.java:154) > at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:333) > at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:317) > at > groovy.text.markup.MarkupTemplateEngine$TemplateGroovyClassLoader.parseClass(MarkupTemplateEngine.java:256) > at > groovy.text.markup.MarkupTemplateEngine$MarkupTemplateMaker.<init>(MarkupTemplateEngine.java:229) > at > groovy.text.markup.MarkupTemplateEngine.createTemplate(MarkupTemplateEngine.java:174) > at > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.loadTemplate(TemplateManagementService.java:142) > at > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.getTemplateFromInfo(TemplateManagementService.java:175) > at > com.protocrawler.jtf.reporting.testexecution.html.TemplateManagementService.<init>(TemplateManagementService.java:111) > ... 28 common frames omitted > Error occurred during execution: Unexpected error loading template PacketTrace > > Does anyone have any suggestions of what the cause of these issues may be, or > steps we could take to avoid the issues please? > > > If it’s relevant here, the JRE we’re currently using is Just J OpenJDK JRE > 21.0.5, though we’ve tried other versions of OpenJDK including 17.x and still > see the same issues. > > Best Regards, > > Rich. >