【发布时间】:2018-12-18 10:39:30
【问题描述】:
我正在尝试从 nashorn 迁移到 graalvm (java 11)。我有很多 java 脚本。
描述 -> 以 maven libs org.graalvm.js: graal-sdk, js, js-scriptengine, org.graalvm.truffle: truffle-api 连接到 java 项目。版本 1.0.0-rc9.
ScriptEngine created like 'new ScriptEngineManager().getEngineByName("graal.js")';
然后您可以在地图中的数组中创建地图,例如:
Map mapOuter = new HashMap();
Map mapInner = new HashMap();
List arrayInner = new ArrayList();
mapInner.put("1", 3);
arrayInner.add(mapInner);
mapOuter.put("2", arrayInner);
然后将 mapOuter 转换为 ProxyObject,如 ProxyObject.fromMap(mapOuter);
使用以下代码评估测试 JavaScript:
function test(param) {
print(param["2"]);
param["2"].forEach(function(inArray){
print(inArray);
});
}
这会引发类似的错误:
javax.script.ScriptException: org.graalvm.polyglot.PolyglotException: TypeError: INVOKE on foreign object failed due to: Message not supported: INVOKE
那么问题来了:如何让graalvm正确地将复杂的java对象传递给javascript函数?
附言在这个例子中我想要的是调用像这样的对象:
打印(参数["2"][0]["1"]);
它打印了我 3。
我尝试了什么:
尝试将 outerMap 的每个成员解析为 ProxyObject/ProxyArray。
什么工作
如果您更改 javascript,例如:
print(param["2"][0].get("1"));
它将打印 3;
【问题讨论】:
标签: javascript java graalvm