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?

Author: tim_yates, 2016-09-27

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

 1
Author: Abhinandan Satpute, 2017-05-23 12:00:50