Hi Jim,

You have been very quick with your response to my query.

Thanks for going through the trouble, apologies for the empty folders, they
are submodules that haven;t been pushed correctly to my repo.

I have made the changes you suggested and rebuilt my class (I had to get
the latest version of the codebase as JSObject wasn;t present in
nashorn.jar in  my old code-base).

After building and running I get the below:

Exception in thread "main" java.lang.ClassCastException:
jdk.nashorn.api.scripting.ScriptObjectMirror cannot be cast to
jdk.nashorn.api.scripting.JSObject
at JSJSONInJava.main(JSJSONInJava.java:19)

Lines 18 and 19 are as follows:
17: // fetch the value of a variable
18: Object objFromJS = engine.get("JSONObjectUsingJavaScript");
19: JSObject jsonObjFromJS = (JSObject) objFromJS;

Any ideas, or is it something new?

Regards,
mani

On Wed, Jun 5, 2013 at 8:51 PM, Jim Laskey <[email protected]> wrote:

> The repo you provided has empty JSON-java and JSON-js directories, so I'll
> give you an alternative example.  The main thing to note is that, because
> of a JS object's dynamic nature, it can not mirror a Java object.  A better
> analogy would be to think of a JS object as a Map object, where properties
> are keys and you access values with keys.
>
> Run the enclosed example as follows;
>
> javac Example.java
> java Example
>
> The class of myObject is a JSObject.  You can access properties of a
> JSObject with getMember/setMember (or getSlot/setSlot for integer keys.)
>
> === Example.java ===
>
> import javax.script.*;
> import jdk.nashorn.api.scripting.JSObject;
>
> public class Example {
> public static void main(String[] args) throws Exception {
>  ScriptEngineManager factory = new ScriptEngineManager();
>  ScriptEngine engine = factory.getEngineByName("nashorn");
>  engine.eval(new java.io.FileReader("Example1.js"));
>  JSObject myObject = (JSObject)engine.get("myObject");
>  System.out.println(myObject.getMember("a"));
>  System.out.println(myObject.getMember("b"));
>  System.out.println(myObject.getMember("c"));
>         myObject.setMember("d", "A new string");
>  engine.eval(new java.io.FileReader("Example2.js"));
>
> }
> }
>
> === Example1.js ===
>
> var myObject = {
>    a: "A string",
>    b: 100,
>    c: true
> }
>
> === Example2.js ===
>
> print(myObject.d);
>
> ==== Output ===
>
> A string
> 100
> true
> A new string
>
>
> Cheers,
>
> -- Jim
>
>
>
>
>
>
> On 2013-06-05, at 3:50 PM, Mani Sarkar <[email protected]> wrote:
>
> Hi,
>
> I have another query regarding the example (see
>
> https://github.com/neomatrix369/NashornHackDay/blob/master/examples/JSON_in_JS_and_Java/JSJSONInJava.java
> )
> created sometime back  during the Nashorn hackday. When I bring a JS object
> created in Nashorn into Java I'm not able to access the object directly,
> how do I access it like a normal java object.
>
> If its a raw / primitive type then the contents are accessible (you can see
> the value) while for JS object, when I say
>
> *System.out.println(JSObjectFromNashorn);*
>
>
> I get the below output
>
> *[object object]*
>
>
> The full implementation of what I'm talking about can be found at the above
> link.
>
> Regards,
> mani
>
> --
> *Twitter:* @theNeomatrix369          *Blog:*
> http://neomatrix369.wordpress.com
> *JUG activity:* LJC Advocate (@adoptopenjdk & @adoptajsr programs)
> *Meet-a-Project:* https://github.com/MutabilityDetector
> *Bitbucket:* https://bitbucket.org/neomatrix369  * **Github:*
> https://github
> .com/neomatrix369
> *LinkedIn:* http://uk.linkedin.com/pub/mani-sarkar/71/a77/39b
> *Devoxx UK 2013* was a grand success:
> http://www.devoxx.com/display/UK13/Home
>
> *Don't chase success, rather aim for "Excellence", and success will come
> chasing after you!*
>
>
>


-- 
*Twitter:* @theNeomatrix369          *Blog:*
http://neomatrix369.wordpress.com
*JUG activity:* LJC Advocate (@adoptopenjdk & @adoptajsr programs)
*Meet-a-Project:* https://github.com/MutabilityDetector
*Bitbucket:* https://bitbucket.org/neomatrix369  * **Github:* https://github
.com/neomatrix369
*LinkedIn:* http://uk.linkedin.com/pub/mani-sarkar/71/a77/39b
*Devoxx UK 2013* was a grand success:
http://www.devoxx.com/display/UK13/Home

*Don't chase success, rather aim for "Excellence", and success will come
chasing after you!*

Reply via email to