我正在使用 engine.put() 方法将对象传递给 scriptEngine,并尝试使用 engine.eval() 方法检索所述对象的属性。但是我似乎无法访问它们,因为对象在放入引擎时似乎失去了它的方法,而且我通常在 Javascript 中使用的 get() 方法似乎也失败了。
try {
ScriptEngine engine = new ScriptEngineManager().getEngineByName("graal.js");
engine.put("transformContext",transformContext);
engine.put("dataRecordsByName",transformContext.getDataRecordsByName());
//These three all return what I'm expecting - 2x the whole object and then just dataRecordsByName property
System.out.println(engine.get(transformContext));
System.out.println(engine.eval("print(transformContext"));
System.out.println(engine.get(dataRecordsByName));
//These throw errors get() and getDataRecordsByName() seemingly do not exist for transformContext in the engine
System.out.println(engine.eval("print(transformContext.getDataRecordsByName())"));
System.out.println(engine.eval("print(transformContext.get('dataRecordsByName'))"));
}catch(Exception e){
System.err.println("Error evaluating script: "+e.getMessage());
}
我读过 scriptEngine 只从公共类中导入公共方法。在这种情况下,虽然 TransformContext 和它的所有方法一样都是公共的,所以应该没问题吗?
任何帮助理解这一点或解决方案将不胜感激。