Exception while using ES6 features (template strings) with Nashorn on JDK 9

Hannes Wallnöfer hannes.wallnoefer at oracle.com
Wed Apr 26 14:12:29 UTC 2017


Hi Mohammed,

as Jim noted you have to enable ES6 features using the —language=es6 option. The official Script API does not support engine options, but you can use the Nashorn API:

import javax.script.ScriptEngine;
import jdk.nashorn.api.scripting.NashornScriptEngineFactory; 

NashornScriptEngineFactory factory = new NashornScriptEngineFactory();
ScriptEngine engine = factory.getScriptEngine("--language=es6");

Hannes


> Am 26.04.2017 um 16:00 schrieb Jim Laskey (Oracle) <james.laskey at oracle.com>:
> 
> You need to specify --language=es6 on the command line
> 
>> On Apr 26, 2017, at 10:25 AM, Mohammed Sanaulla <sanaulla123 at gmail.com> wrote:
>> 
>> Hello All,
>> 
>> I am using build b166 of JDK 9.
>> 
>> And I tried to run the following code:
>> 
>> ScriptEngineManager engineManager = new ScriptEngineManager();
>> ScriptEngine engine = engineManager.getEngineByName("nashorn");
>> engine.eval("function sum(a, b) { return a + b; }");
>> System.out.println(engine.eval("sum(1, 2);"));
>> engine.eval("var name = 'Sanaulla'");
>> System.out.println(engine.eval("print(`Hello Mr. ${name}`)"));
>> 
>> The sum(1,2) works fine by printing 3. But the other part i.e using
>> template strings throws the following exception:
>> 
>> Exception in thread "main" javax.script.ScriptException: <eval>:1:6
>> Expected an operand but found error
>> print(`Hello Mr. ${name}`)
>>     ^ in <eval> at line number 1 at column number 6
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.throwAsScriptException(NashornScriptEngine.java:469)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:536)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:523)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.evalImpl(NashornScriptEngine.java:401)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.eval(NashornScriptEngine.java:154)
>>       at
>> java.scripting/javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264)
>>       at
>> nashorn.demo/com.packt.JavascriptCodeFromJavaDemo.main(JavascriptCodeFromJavaDemo.java:13)
>> Caused by: jdk.nashorn.internal.runtime.ParserException: <eval>:1:6
>> Expected an operand but found error
>> print(`Hello Mr. ${name}`)
>>     ^
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:297)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.AbstractParser.error(AbstractParser.java:282)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:4443)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.expression(Parser.java:4601)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.conditionalExpression(Parser.java:4753)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:4692)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.argumentList(Parser.java:3706)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.leftHandSideExpression(Parser.java:3389)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.unaryExpression(Parser.java:4421)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.expression(Parser.java:4601)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.conditionalExpression(Parser.java:4753)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.assignmentExpression(Parser.java:4692)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.expression(Parser.java:4570)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.expression(Parser.java:4566)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.expressionStatement(Parser.java:1847)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.statement(Parser.java:1155)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.sourceElements(Parser.java:909)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.program(Parser.java:844)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.parse(Parser.java:325)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.parser.Parser.parse(Parser.java:285)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.Context.compile(Context.java:1500)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.Context.compileScript(Context.java:1467)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.internal.runtime.Context.compileScript(Context.java:750)
>>       at
>> jdk.scripting.nashorn/jdk.nashorn.api.scripting.NashornScriptEngine.compileImpl(NashornScriptEngine.java:534)
>>       ... 5 more
>> 
>> I even tried running template strings from jjs console, but I am facing
>> same issue.
>> 
>> Can someone please guide me in using the ES6 features in Nashorn on JDK9?
>> 
>> Regards,
>> Sanaulla
> 



More information about the nashorn-dev mailing list