Java Telefonvorwahl:Lesen Nashorn JO4 und 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}; }
Ziel:
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
Für jede Karte Wert habe ich versucht und sind gescheitert mit:
- zu Script oder ScriptObjectMirror Casting
- Casting auf Karte oder Liste
- Zugriff JO4/NativeArray Methoden direkt
- ScriptUtils.wrap()/ScriptUtils.unwrap()
Ich habe überschreiben versucht, die HashMap.put()
Methode, aber es scheint nicht zu einem ScriptObjectMirror
auf Zuweisungen umgewandelt wird, nur auf explizite Funktion aufruft:
dataStore.x = [1,2,3] ; -> jdk.nashorn.internal.objects.NativeArray
javaHost.javaFunc([1,2,3]); -> ScriptObjectMirror
Ich brauche wirklich myCustomHashMap (es Zeitstempel ändert und verwaltet eine Änderungsliste, etc), so dass ich diese Anordnung nicht radikal ändern kann. Was kann ich tun, um diese Daten wieder zu erhalten?