जावा बुला कोड:पढ़ना 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");
जावास्क्रिप्ट:
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 का उपयोग करने की आवश्यकता है (यह टाइमस्टैम्प बदलता है और एक परिवर्तन सूची बनाए रखता है), इसलिए मैं इस व्यवस्था को मूल रूप से बदल नहीं सकता। इस डेटा को वापस पाने के लिए मैं क्या कर सकता हूं?