Java-объект в коде JavaScript с GraalVM не определен - PullRequest
1 голос
/ 23 мая 2019

Я использую GraalVM для взаимодействия с JavaScript, потому что Nashorn должен быть объявлен устаревшим .

Проблема в том, что моя переменная undefined во время выполнения JavaScript.

ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
String path = "rules.js";
InputStream is = Main.class.getClassLoader().getResourceAsStream(path);
Reader reader = new InputStreamReader(is);

engine.eval(reader);
Invocable inv = (Invocable) engine;
Object obj = engine.get("obj");

User user = new User();
user.setName("username");
user.setProfile("admin");

Boolean value = (Boolean) inv.invokeMethod(obj, "validatePermission", user);

Это код JavaScript, который я запускаю:

var obj = new Object();

obj.validatePermission = function(user) {
    console.log(user.profile)
    if(user.profile === 'admin') {
        return true;
    } else {
        throw 'Unauthorized. User must be administrator.';
    }
}

Зависимости POM:

<project>
    <properties>
        <graalvm.version>19.0.0</graalvm.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.graalvm.js</groupId>
            <artifactId>js</artifactId>
            <version>${graalvm.version}</version>
        </dependency>
        <dependency>
            <groupId>org.graalvm.js</groupId>
            <artifactId>js-scriptengine</artifactId>
            <version>${graalvm.version}</version>
        </dependency>
        <dependency>
            <groupId>org.graalvm.truffle</groupId>
            <artifactId>truffle-api</artifactId>
            <version>${graalvm.version}</version>
        </dependency>
    </dependencies>
</project>

1 Ответ

1 голос
/ 23 мая 2019

Настройка режима совместимости Nashorn решает эту проблему.

System.setProperty("polyglot.js.nashorn-compat", "true");

Более подробную информацию можно найти здесь: Руководство по миграции Nashorn .

Вся указанная выше информация эта проблема командой GraalVM.

...