David Maciver created GROOVY-7980:
-------------------------------------

             Summary: Exception when using grab annotation with system 
classloader and ScriptEngine
                 Key: GROOVY-7980
                 URL: https://issues.apache.org/jira/browse/GROOVY-7980
             Project: Groovy
          Issue Type: Bug
    Affects Versions: 2.4.7
         Environment: oracle-jdk-bin-1.8.0_101
            Reporter: David Maciver
            Priority: Minor


This program throws the following exception when it should print a connection 
object. The system classloader is sun.misc.Launcher$AppClassLoader which is 
found in GrabAnnotationTransformation.java but is then rejected in 
isValidTargetClassLoaderClass in GrapeIvy.groovy

If isValidTargetClassLoaderClass is modified to return true for this 
classloader, then the program produces the expected output. Could it accept any 
class loader parameter set from the system classloader?

{code}
import org.codehaus.groovy.jsr223.GroovyScriptEngineImpl;

public class Main {
        public static void main(String[] args) throws Exception {
                GroovyScriptEngineImpl scriptEngine = new 
GroovyScriptEngineImpl();
                
                scriptEngine.eval(
                        "@GrabConfig(systemClassLoader=true)\n"
                        + "@Grab('org.hsqldb:hsqldb:latest.release')\n"
                        + "import java.sql.DriverManager\n"
                        + "println 
DriverManager.getConnection('jdbc:hsqldb:mem:test')\n"
                );
        }
}
{code}

{code}
Exception in thread "main" javax.script.ScriptException: 
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
General error during conversion: No suitable ClassLoader found for grab

java.lang.RuntimeException: No suitable ClassLoader found for grab
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at 
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at 
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
        at 
org.codehaus.groovy.reflection.CachedConstructor.invoke(CachedConstructor.java:83)
        at 
org.codehaus.groovy.runtime.callsite.ConstructorSite$ConstructorSiteNoUnwrapNoCoerce.callConstructor(ConstructorSite.java:105)
        at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallConstructor(CallSiteArray.java:60)
        at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:235)
        at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callConstructor(AbstractCallSite.java:247)
        at groovy.grape.GrapeIvy.chooseClassLoader(GrapeIvy.groovy:184)
        at groovy.grape.GrapeIvy$chooseClassLoader.callCurrent(Unknown Source)
        at 
org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallCurrent(CallSiteArray.java:52)
        at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:154)
        at 
org.codehaus.groovy.runtime.callsite.AbstractCallSite.callCurrent(AbstractCallSite.java:166)
        at groovy.grape.GrapeIvy.grab(GrapeIvy.groovy:251)
        at groovy.grape.Grape.grab(Grape.java:167)
        at 
groovy.grape.GrabAnnotationTransformation.visit(GrabAnnotationTransformation.java:378)
        at 
org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:321)
        at 
org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931)
        at 
org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
        at 
org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:569)
        at 
org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:546)
        at 
groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:254)
        at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:211)
        at 
org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.getScriptClass(GroovyScriptEngineImpl.java:363)
        at 
org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:150)
        at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
        at Main.main(Main.java:8)
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to