Nashorn: Javascript to Java call question

Mani Sarkar sadhak001 at gmail.com
Thu Jun 6 03:25:59 PDT 2013


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 <james.laskey at oracle.com> 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 <sadhak001 at gmail.com> 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!*


More information about the nashorn-dev mailing list