Java çağıran kodu:Okuma Nashorn JO4 ve 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}; }
Hedef: Her Harita değer için
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
, denedim ve başarısız oldu ettik:
-
JO4/NativeArray yöntemleri doğrudan
- ScriptUtils.wrap() Erişme
- Harita veya Liste için Döküm ScriptObject veya ScriptObjectMirror
- için Döküm
- /ScriptUtils.unwrap()
Ben geçersiz kılma denedim HashMap.put()
yöntem, ancak yalnızca açık fonksiyonu üzerine, ödevlerini ScriptObjectMirror
dönüştürülebilir bağımsız gözükmektedir çağırır:
dataStore.x = [1,2,3] ; -> jdk.nashorn.internal.objects.NativeArray
javaHost.javaFunc([1,2,3]); -> ScriptObjectMirror
Gerçekten de myCustomHashMap'i kullanmam gerekiyor (zaman damgalarını değiştiriyor ve bir değişiklik listesi vb.), Dolayısıyla bu düzenlemeyi kökten değiştiremiyorum. Bu verileri geri almak için ne yapabilirim?