GroovyShell: использование переменных типа [java .lang.Object] ошибка при доступе типа Double в Binding - PullRequest
0 голосов
/ 08 апреля 2020

Я интегрирую Groovy Оболочку в приложение Java, чтобы пользователи могли выполнять вычисления для своих доменных объектов. Я использую CompilerConfiguration, чтобы ограничить то, что они могут сделать по очевидным причинам безопасности. Я хотел бы ограничить ClassesWhiteList только коробочными примитивами. Однако, когда я передаю Double через Binding, я получаю исключение Usage of variables of type [java.lang.Object]. Я ожидаю, что следующее пройдет, но это произойдет, только если я включу Object.class в свой белый список класса.

    SecureASTCustomizer secure = new SecureASTCustomizer();
    secure.setConstantTypesClassesWhiteList(List.of(Double.class));
    CompilerConfiguration configuration = new CompilerConfiguration().addCompilationCustomizers(secure);

    Binding binding = new Binding();
    Double value = 42.0;
    binding.setVariable("foo", value);

    Object foo = new GroovyShell(binding, configuration).evaluate("foo");
    assertEquals(42.0, foo);

Есть ли способ, которым я могу использовать Bindings / Compiler Options, чтобы это передать?

...