Previously, nashorn.jar used to have netscape.javascript.JSObject and ScriptObjectMirror used to extend that class.

To avoid confusion with desktop profile's netscape.javascript.JSObject (and also avoid applet dependency on nashorn), we have renamed that class to jdk.nashorn.api.scripting.JSObject.

Chances are that you may be using a jdk8 build with the old version of nashorn.jar in it. The following should work if you pull and build nashorn.jar

Say, $jdk/nashorn/dist/nashorn.jar is the latest nashorn.jar built from nashorn repo

Then the following command can be used:

jjs -J-Djava.ext.dirs=$jdk/nashorn/dist

The above command forces nashorn.jar from your nashorn repo to be instead of the one bundled in jdk8. Note that this problem will go away in a future jdk8 snapshot build (as well as fcs release of jdk8)

hope this helps,
-Sundar


On Thursday 06 June 2013 03:55 PM, Mani Sarkar wrote:
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!*





Reply via email to