I am trying to migrate from nashorn to graalvm (java 11). I have a lot of java script.
Description -> Connecting to java project as maven libs org.graalvm.js: graal-sdk, js, js-scriptengine, org.graalvm.truffle: truffle-api. Version 1.0.0-rc9.
ScriptEngine created like 'new ScriptEngineManager().getEngineByName("graal.js")';
Then you can create map in array in map like:
Map mapOuter = new HashMap();
Map mapInner = new HashMap();
List arrayInner = new ArrayList();
mapInner.put("1", 3);
arrayInner.add(mapInner);
mapOuter.put("2", arrayInner);
Then convert mapOuter to ProxyObject like ProxyObject.fromMap(mapOuter);
Evaluate test javascript with code like:
function test(param) {
print(param["2"]);
param["2"].forEach(function(inArray){
print(inArray);
});
}
Which will invoke error like:
javax.script.ScriptException: org.graalvm.polyglot.PolyglotException: TypeError: INVOKE on foreign object failed due to: Message not supported: INVOKE
So the question is: how to make graalvm to transfer complex java object to javascript function properly?
p.s. What i want in this example is to call object like:
print(param["2"][0]["1"]);
and it prints me 3.
What i tried:
tried to parse each member of outerMap as ProxyObject/ProxyArray.
What was working
If you change javascript like:
print(param["2"][0].get("1"));
it will prints 3;