Message-ID: <27478109.5082.1493249398844.JavaMail.email@example.com> Subject: Exported From Confluence MIME-Version: 1.0 Content-Type: multipart/related; boundary="----=_Part_5081_1505638690.1493249398844" ------=_Part_5081_1505638690.1493249398844 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Content-Location: file:///C:/exported.html
jdk8 replaces Rhino based jsr-223 script engine with nashorn based jsr-2= 23 script engine. If you are using Rhino based jsr-223 script engine in jdk= 6 or jdk 7, you'll have some migration work when moving to jdk 8. This doc= ument is a migration guide towards that task.
Nashorn implements ECMAScript 5.1 specification with a number of syntax = and API extensions as documented in Nashorn extensions Few of those are Rhino specific extensions = as well. You may want to go through that document to check if a Rhino speci= fic extension is already supported by nashorn.
Nashorn supports top-level "Packages" object = and "java", "javax" e= tc. as supported by Rhino. You can use Packages object to access Java packa= ges and classes. But, Nashorn's recommended way to access Java classes is t= o use Java.type.
Java.type is recommended because
1) It avoid multiple step object.property resolution as done by Packages= method. Class resolution is done in one step - from String name to class= p>
2) Java.type throws ClassNotFoundException rather than silently treating= an unresolved name to be package name!
java.util.vector results in a package object named "java.util.vecto= r" whereas Java.type("java.util.vector") results in ClassNot= FoundException.
In Rhino, you create a Java array using Java reflection from script. In = Nashorn, you can resolve to a Java array class using the same Java.type API= . And array creation is done using new operator
Java array elements are accessed/modified using  operator in both rhin= o as well as nashorn. Also special "length" property is supported= both in rhino and nashorn.
If a java API accepts a java.lang.Class object, in rhino you can pass sc= ript representation of class "as is". In Nashorn, you've to use &= quot;.class" property (similar to Java).
In the above example, better way to create Java string array from Nashor= n would be to get String type from Nashorn using Java.type. The example i= s written this way only to demonstrate ".class" property.
Rhino's magic writable property __proto__ to read/write prototype of an = object is also supported by nashorn for compatibility. But nashorn recommen= ded way to read/write is Object.getPrototypeOf ( http://es5.github.io/#x18.104.22.168 ) and Object.setPrototypeOf<= /strong> ( https://developer.mozilla.org/en-US/docs/Web/JavaScri= pt/Reference/Global_Objects/Object/setPrototypeOf ) APIs. __proto__, wh= ile supported by nashorn, is deprecated.
Nashorn supports JavaImporter constructor of Rhino. It is possible to lo= cally import multiple java packages and use it within a 'with' statement.= p>
Rhino wraps Java exceptions as a script object. If you want underlying J= ava exception, you've to use "javaException" property to access i= t. Nashorn does not wrap Java exceptions. Java exception objects as thrown = "as is". So, in catch blocks you can access Java exceptions "= ;as is".
Also, no Java object is wrapped as "script object" in Nashorn = (unlike Java).
Both Rhino and Nashorn support java anonymous class-like syntax to imple= ment java interfaces in script.
The example @ https://githu= b.com/mozilla/rhino/blob/master/examples/enum.js works on Nashorn as we= ll.
To extend a concrete Java class or to implement multiple interfaces, you= have to use Java.extend in Nashorn - unlike "JavaAdapter" in Rhi= no. Java.extend is explained in Nashorn extensions document.
There are few Rhino/Mozilla extensions that are supported only if you lo= ad the compatibility script provided by nashorn. The compatibility script i= s loaded using "load('nashorn:mozilla_compat.js")
The compatibility script implements the following Rhino extensions: