MVEL - Ошибка: не удалось получить доступ к полю в ReflectiveAccessorOptimizer

Я новичок в МВЭЛ. Следующие шаги я выполнил

1) Последняя версия загружена с http://mvel.codehaus.org/Downloading+MVEL, т. е. скачать mvel2-2.2.0.jar (требуется JDK 1.5+)

2) Создал простой список пользовательских объектов

       class TestMVEL {
    public static void main(String[] p){
        String expr0 = "fruits[1]";
        String expr1 = "System.out.println(fruits[1]);";
        String expr2 = "foreach( f : fruits) { System.out.println(f.getName()); }";  

        System.out.println(MVEL.eval(expr0, new Basket()));//prints Fruit{name=Banana}
        MVEL.eval(expr1, new Basket());// prints Fruit{name=Banana}
        MVEL.eval(expr2, new Basket());//error
    }
}
class Basket {
   List<Fruit> fruits = new ArrayList<Fruit>();

   public List<Fruit> getFruits(){
     fruits.clear();
     fruits.add(new Fruit("Apple"));
     fruits.add(new Fruit("Banana"));
     fruits.add(new Fruit("Orange"));
     return fruits;
   }
}

class Fruit { 
    private String name; 
    public Fruit(String n){
        name = n;
    }
    public String getName(){
        return name;
    }
    public String toString() {
        return "Fruit{" + "name=" + name + '}';
    }
}

3) Получение ошибки ниже

Исключение в потоке "main" [Ошибка: f.getName(): Class org.mvel2.optimizers.impl.refl.ReflectiveAccessorOptimizer не может получить доступ к члену класса test.Fruit с модификаторами "public"] [Near: {... foreach( f : фрукты) { System.out.println(f.getName()); } ....}]


person prash    schedule 07.02.2015    source источник


Ответы (1)


класс Fruit должен быть общедоступным.

public class Fruit...
person belwood    schedule 24.06.2019