Java код вызова:Чтение Nashorn JO4 и NativeArray
import jdk.nashorn.api.scripting.*;
....
myCustomHashMap dataStore = new myCustomHashMap();
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("nashorn");
engine.put("dataStore",dataStore);
engine.eval(new java.io.FileReader("test.js"));
((Invocable)engine).invokeFunction("jsTestFunc", "testStr");
Javascript:
function jsTestFunc (testParam)
{ dataStore.a = [1,2,3];
dataStore.b = {First:"John",Last:"Doe",age:37}; }
Цель:
I need to JSONify the dataStore after the script execution
with no dependence on the script for assistance
dataStore.a -> jdk.nashorn.internal.objects.NativeArray
dataStore.b -> jdk.nashorn.internal.scripts.JO4
Для каждого значения карт, я попробовал и потерпел неудачу с:
- Кастинг в ScriptObject или ScriptObjectMirror
- Кастинг на карте или в списке
- Доступ к методам JO4/NativeArray непосредственно
- ScriptUtils.wrap()/ScriptUtils.unwrap()
Я попытался переопределяя HashMap.put()
метода, но он, кажется, не быть преобразован в ScriptObjectMirror
по заданиям, только на четких вызовы функций:
dataStore.x = [1,2,3] ; -> jdk.nashorn.internal.objects.NativeArray
javaHost.javaFunc([1,2,3]); -> ScriptObjectMirror
Мне действительно нужно использовать myCustomHashMap (это временные изменения и поддерживает список изменений и т. Д.), Поэтому я не могу радикально изменить эту схему. Что я могу сделать, чтобы вернуть эти данные?