-
Bug
-
Resolution: Fixed
-
Major
-
2.4.3
-
None
-
-
Empty show more show less
-
Basel 37
-
3
When using the console or a script with e.g.
Welcome to the Magnolia Groovy Interactive Console! Type help for more info and a list of available commands. [Using Groovy version 2.4.3]. mgnl> MgnlContext.getJCRSession("config")
one might get the error
GroovyBugError: BUG! exception in phase 'semantic analysis' in source unit 'Script1.groovy' null
Stacktrace is
Caused by: java.lang.NullPointerException at info.magnolia.context.RequestAttributeStrategy.getAttribute(RequestAttributeStrategy.java:83) at info.magnolia.context.AbstractContext.getAttribute(AbstractContext.java:107) at info.magnolia.context.ContextDecorator.getAttribute(ContextDecorator.java:74) at info.magnolia.module.groovy.console.MgnlGroovyConsoleContext.getRepositoryStrategy(MgnlGroovyConsoleContext.java:111) at info.magnolia.module.groovy.console.MgnlGroovyConsoleContext.getJCRSession(MgnlGroovyConsoleContext.java:140) at info.magnolia.module.groovy.support.classes.MgnlGroovyResourceLoader.loadGroovySourceFromRepository(MgnlGroovyResourceLoader.java:109) at info.magnolia.module.groovy.support.classes.MgnlGroovyResourceLoader.loadGroovySource(MgnlGroovyResourceLoader.java:87) at org.codehaus.groovy.control.ClassNodeResolver.tryAsScript(ClassNodeResolver.java:228) at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:204) at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:167) at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:123) at org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:675) at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307) at org.codehaus.groovy.control.ResolveVisitor.resolveFromModule(ResolveVisitor.java:637) at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307) at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:275) at org.codehaus.groovy.control.ResolveVisitor.transformVariableExpression(ResolveVisitor.java:924) at org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:693) at org.codehaus.groovy.control.ResolveVisitor.transformMethodCallExpression(ResolveVisitor.java:1062) at org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:701) at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:139) at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40) at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163) at org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1317) at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112) at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:50) at org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:200) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123) at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50) at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1260) at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:175) at org.codehaus.groovy.control.CompilationUnit$11.call(CompilationUnit.java:648) at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:928) ... 105 more
Note
It's difficult to give exact steps of how to reproduce, as the script/console command might be executed successfully more than once before the error occurs.
Found cause
MgnlGroovyResourceLoader#context is being stale upon the second run. Therefore, we get all the exceptions upon operations on the context.
Solution
Its simply getting Context on every request instead of doing once in the constructor.
- caused by
-
MGNLGROOVY-142 Refactor module to use Node API instead of deprecated Content API
- Closed
- duplicates
-
MGNLGROOVY-145 NPE in in ConsoleContext when strategy is not set (when executing console OUT of web context (on a separate thread for example)
- Closed