Я использую 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>