Article articleTmp = (Article) Article;
in Groovy is the same as
Article articleTmp = (Article) Article.getClass();
in Java.
Article.getClass()
is of type Class<Article>, so casting it to Article will fail - what you
want to do ist pass an Article instance, not the class, I presume...
hth,
mg
On 24/02/2020 18:24, Mickaël SALMON wrote:
Hello,
I'm using last Groovy version (3.0.1) in my Java application to run
user defined scripts (Java based).
Here is how a script is executed (sorry for the formatting) :
public Object eval(String scriptName, String script, Map<String,
Object> mapVariable)
throws CochiseException {
groovy.lang.Script groovyScript = this.scriptCache.get(scriptName);
if (groovyScript == null) {
groovyScript = new GroovyShell().parse(script);
this.scriptCache.put(scriptName, groovyScript);
}
groovyScript.setBinding(new Binding(mapVariable));
return groovyScript.run();
}
I have the following exception when I pass the object "Article" of
class "com.sylob.cochise.dm1.ejb.entite.article.Article" in the Map of
variables :
org.codehaus.groovy.runtime.typehandling.GroovyCastException:
Cannot cast object 'interface
com.sylob.cochise.dm1.ejb.entite.article.Article' with class
'java.lang.Class' to class
'com.sylob.cochise.dm1.ejb.entite.article.Article'
Here is the script :
import com.sylob.cochise.dm1.ejb.entite.article.Article;
println "CL import Article : " + Article.class.getClassLoader()
println "CL var Article: " + Article.getClass().getClassLoader()
Article articleTmp = (Article) Article;
// ... some stuff
This not seem to be a classLoader problem, because same class loader
is used to load both com.sylob.cochise.dm1.ejb.entite.article.Article
class in the script and "Article" object in the calling application.
Also tested with 2.5.9, same error.
What's wrong here ?
Thanks.