Hi Sundar, Yes, I have the latest changes from repo https://www.evernote.com/shard/s6//sh/4d10ecd8-0e02-4f60-ae37-ecaf926e953a/97ba34655ebea7bc966633386b5be2a5 Cleaned and compiled and replaced jar from jdk8 installation. Looks good so far.
Thanks for help -- With Best Regards, Vik Gamov On September 18, 2013 at 9:07:39 AM, A. Sundararajan ([email protected]) wrote: Hi, Do you have this changeset from http://hg.openjdk.java.net/nashorn/jdk8/nashorn ? changeset: 555:a62172fe5bae tag: tip user: sundar date: Wed Sep 18 16:36:25 2013 +0530 summary: 8024973: Using a different ScriptContext with a CompiledScript results in ScriptException I've added a simplified test in the repo. "ant clean test" should pass everything. ScriptEngine.compileAndEvalInDiffContextTest is the test added. If that one does not cover your application, then I'd need more info on your application or another simplified test case demonstrating your particular scenario. BTW, it is better is to avoid changing ENGINE_SCOPE bindings -- i.e., using one global (ENGINE_SCOPE) for compilation and running the code for another global object for 'eval' could be the reason. In any case, a simpler test case would be better. Thanks -Sundar On Wednesday 18 September 2013 06:31 PM, Viktor Gamov wrote: Sundar, Thanks for update. I pulled recent changes, built nashorn.jar once again and replaced nashorn.jar from jdk8 installation. My use case still failing. Could you check on your side? Thanks -- With Best Regards, Vik Gamov On September 18, 2013 at 1:07:10 AM, Viktor Gamov ([email protected]) wrote: Hello nashorn team, Another question from my side ;-). I want to test 2 versions of same javascript file - compiled and not. var json = { engine: { name: String(factory.engineName), version: String(factory.engineVersion), threading: String(factory.getParameter("THREADING")) }, language: { name: String(factory.languageName), version: String(factory.languageVersion) } }; print(JSON.stringify(json)); Here are my test cases: @Test public void contexts() throws ScriptException, FileNotFoundException { System.out.println("Passing JavaObject via ScriptContext to the engine"); File f = new File(this.getClass().getClassLoader().getResource("environment.js").getFile()); ScriptContext scriptContext = new SimpleScriptContext(); int scope = ScriptContext.ENGINE_SCOPE; scriptContext.setAttribute("factory", engine.getFactory(), scope); engine.eval(new FileReader(f), scriptContext); } This test method prints json as expected Passing JavaObject via ScriptContext to the engine {"engine":{"name":"Oracle Nashorn","version":"1.8.0","threading":"null"},"language":{"name":"ECMAScript","version":"ECMA - 262 Edition 5.1"},"script":{}} But same script fails with compiled version. Test method: @Test public void contextWithCompiled() throws ScriptException, FileNotFoundException { System.out.println("Passing JavaObject via ScriptContext to CompiledScript"); File f = new File(this.getClass().getClassLoader().getResource("environment.js").getFile()); Compilable compilable = (Compilable) engine; CompiledScript compiledScript = compilable.compile(new FileReader(f)); ScriptContext scriptContext = new SimpleScriptContext(); int scope = ScriptContext.ENGINE_SCOPE; scriptContext.setAttribute("factory", engine.getFactory(), scope); compiledScript.eval(scriptContext); } Output: Passing JavaObject via ScriptContext to CompiledScript javax.script.ScriptException: [object Error] in <eval> at line number 3 at jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:553) at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:537) at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:517) at jdk.nashorn.api.scripting.NashornScriptEngine.access$100(NashornScriptEngine.java:77) at jdk.nashorn.api.scripting.NashornScriptEngine$4.eval(NashornScriptEngine.java:568) at com.faratasystems.javaone.NashornTest.contextWithCompiled(NashornTest.java:83) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:74) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:202) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:65) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: <eval>:3 [object Error] at jdk.nashorn.internal.runtime.ECMAErrors.error(ECMAErrors.java:57) at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:319) at jdk.nashorn.internal.runtime.ECMAErrors.referenceError(ECMAErrors.java:291) at jdk.nashorn.api.scripting.NashornScriptEngine.__noSuchProperty__(NashornScriptEngine.java:286) at jdk.nashorn.internal.scripts.Script$engine._L35(nashorn:engine/resources/engine.js:37) at jdk.nashorn.internal.scripts.Script$\^eval\_.runScript(<eval>:3) at jdk.nashorn.internal.runtime.ScriptFunctionData.invoke(ScriptFunctionData.java:527) at jdk.nashorn.internal.runtime.ScriptFunction.invoke(ScriptFunction.java:204) at jdk.nashorn.internal.runtime.ScriptRuntime.apply(ScriptRuntime.java:395) at jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:535) ... 30 more Process finished with exit code 255 java -version java version "1.8.0-ea" Java(TM) SE Runtime Environment (build 1.8.0-ea-b106) Java HotSpot(TM) 64-Bit Server VM (build 25.0-b48, mixed mode) nashorn.jar built based on Revision: 553 Apparently, I missing something again :-) . Please advise... p.s. Is there any doc about what global objects/methods (like, print, load, JSON, etc) available for js scripts in Nashorn/jjs repl? Thanks -- With Best Regards, Vik Gamov
