Java kod wywołujący:Reading Nashorn JO4 i 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}; }
Cel:
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
Dla każdej wartości Mapa, próbowałem i nie udało się:
- Casting do ScriptObject lub ScriptObjectMirror
- Casting do mapy lub listy
- Dostęp do metod JO4/NativeArray bezpośrednio
- ScriptUtils.wrap()/ScriptUtils.unwrap()
Próbowałem nadrzędnymi HashMap.put()
metoda, ale wydaje się nie być konwertowane do ScriptObjectMirror
nad zadaniami, tylko na wyraźne wywołania funkcji:
dataStore.x = [1,2,3] ; -> jdk.nashorn.internal.objects.NativeArray
javaHost.javaFunc([1,2,3]); -> ScriptObjectMirror
Naprawdę potrzebuję użyć myCustomHashMap (to znaczniki czasu zmieniają i zachowują listę zmian, itd.), Więc nie mogę radykalnie zmienić tej aranżacji. Co mogę zrobić, aby odzyskać te dane?