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!*