Я пытаюсь перейти с nashorn на graalvm (Java 11).У меня много java-скриптов.
Описание -> Подключение к java-проекту как maven libs org.graalvm.js: graal-sdk, js, js-scriptengine, org.graalvm.truffle: truffle-api.Версия 1.0.0-rc9.
ScriptEngine, созданный как '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 для чужого объекта из-за: Сообщение не поддерживается: INVOKE
Итак, вопрос : как заставить graalvm правильно передать сложный объект java в функцию javascript?
ps В этом примере я хочу вызвать объект как:
print (param ["2"] [0] ["1"]);
и он печатает меня 3.
Что я пробовал:
попытался проанализировать каждый элемент outerMap как ProxyObject / ProxyArray.
Что работало Если вы изменилинапример, javascript:
print (param ["2"] [0] .get ("1"));
будет напечатано 3;