GraalVm-Java复杂对象can';不能像javascript对象那样解析
我正在尝试从nashorn迁移到graalvm(Java11)。我有很多java脚本。GraalVm-Java复杂对象can';不能像javascript对象那样解析,javascript,java,graalvm,Javascript,Java,Graalvm,我正在尝试从nashorn迁移到graalvm(Java11)。我有很多java脚本。 Description->以maven libs org.graalvm.js连接到java项目:graal sdk,js,js scriptengine,org.graalvm.truffle:truffle api。版本1.0.0-rc9。创建的脚本引擎类似于“new ScriptEngineManager().getEngineByName(“graal.js”)”然后您可以在map中创建数组中的map
Description->以maven libs org.graalvm.js连接到java项目:graal sdk,js,js scriptengine,org.graalvm.truffle:truffle api。版本1.0.0-rc9。
创建的脚本引擎类似于“new ScriptEngineManager().getEngineByName(“graal.js”)”
然后您可以在map中创建数组中的map,如:
Map mapOuter = new HashMap();
Map mapInner = new HashMap();
List arrayInner = new ArrayList();
mapInner.put("1", 3);
arrayInner.add(mapInner);
mapOuter.put("2", arrayInner);
function test(param) {
print(param["2"]);
param["2"].forEach(function(inArray){
print(inArray);
});
}
然后将mapOuter转换为类似ProxyObject.fromMap(mapOuter)的ProxyObject使用如下代码评估测试javascript:
Map mapOuter = new HashMap();
Map mapInner = new HashMap();
List arrayInner = new ArrayList();
mapInner.put("1", 3);
arrayInner.add(mapInner);
mapOuter.put("2", arrayInner);
function test(param) {
print(param["2"]);
param["2"].forEach(function(inArray){
print(inArray);
});
}
这将调用错误,如:
javax.script.ScriptException:org.graalvm.polyglot.PolyglotException:TypeError:调用外部对象失败,原因是:消息不受支持:INVOKE
所以问题是:如何使graalvm正确地将复杂的java对象转换为javascript函数
p、 在这个例子中,我想要调用对象,比如:打印(参数[“2”][0][“1”]) 它会把我打印3张。
我的尝试:
试图将outerMap的每个成员解析为ProxyObject/ProxyArray。
什么在起作用 如果您更改javascript,如:
打印(参数[“2”][0]。获取(“1”) 它将打印3个 目前(2018年12月)不支持使用
[]
访问Java映射的值。您需要将映射转换为ProxyObject
,才能使[]
正常工作。就像您对maputer
对象所做的那样
否则,它是一个普通的Java映射,在该映射上调用
.get(key)
来获取值 我使用了ProxyObject,但它不起作用。我还尝试使用[ProxyObject in ProxyArray in ProxyObject]构造,但它不起作用。如果我按照以下要点这样做,它对我有效:。请您详细说明这个问题或提供一个更好的代码示例好吗?谢谢,它成功了,但还有另一个问题->“java.lang.IllegalStateException:线程[]请求的多线程访问,但语言js不允许”这样的错误在每次运行时调用alsmot。有办法解决吗?在您的示例中,您使用的是ArrayList,因此当我尝试使用javascript数组push()方法时,它会导致错误“javax.script.ScriptException:org.graalvm.polyglot.PolyglotException:TypeError:INVOKE on JavaObject(java.util.ArrayList)]失败,原因是:未知标识符:push”