Script fonctionnant dans l'éditeur en ligne mais pas dans java GroovShell (Aucune propriété de ce type)
, je travaille pour la première fois avec Groovy
. J'ai un script simple, que je veux exécuter sur mon serveur Java.
Je construis le script ici MyScript dans la console Web Groovy, et quand je l'exécute, il renvoie ce que j'attends [1,10]
.
minValue=1;
maxValue=10;
listValues=[];
enumMap=[];
rangeType="RANGE"; //RANGE,LIST,ENUM,NONE
Object test(int arg){
return getRange();
}
Object[] getRange(){
if (rangeType=="NONE"){
return [];
}
if (rangeType=="RANGE"){
return [minValue,maxValue];
}
if (rangeType=="LIST"){
return listValues;
}
if (rangeType=="ENUM"){
return enumMap;
}
}
println(test(1));
Sur mon serveur Java, j'appelle la méthode test
de cette façon
Script groovyScript = new GroovyShell().parse(script);
return groovyScript.invokeMethod("test", valueSuccess);
Bien que le script fonctionne correctement dans la console Web, lorsque je l'exécute sur mon serveur, il me donne l'exception suivante:
groovy.lang.MissingPropertyException: No such property: rangeType for class: Script1
Exactement Le même script une fois s'exécute sans problème, une fois qu'il lève une exception. Comment peut-il être? Ce n'est même pas complexe, et les déclarations de variables devraient être correctes, n'est-ce pas?
1 answers
Je voudrais que vous fassiez import
le paquet field annotation
et corrigiez le décalartion des variables.Spécifier certains datatype
de la @Field annotation
pour accéder à la variable n'importe où dans le script.
import groovy.transform.Field
@Field int minValue = 1;
@Field int maxValue = 10;
@Field List listValues= [];
@Field Map enumMap = [:];
@Field def rangeType = "RANGE"; //RANGE,LIST,ENUM,NONE
Lien de référence pour créer et accéder aux variables globales dans Groovy