使用 Java Nashorn 引擎仅验证 javascript

Using Java Nashorn engine to validate javascript only

早上好。

我需要通过 java 运行 java 脚本语法验证,但我正在努力寻找最佳解决方案。

我使用以下方法对 Nashorn 进行了一些测试:

try
{
    ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
    Object retVal = engine.eval("findFieldValue(field);");
}
catch (ScriptException e)
{
    response.put("status", "parseexception");
    response.put("msg", e.getMessage());
}

Nashorn 抛出异常,指出 findFieldValuefield 都未定义,这是正确的。 我不需要这种验证。我所需要的只是验证语法,就像 Esprima JS API

所做的那样

http://esprima.org/demo/validate.html

我的问题是。我可以忽略 Nashorn 的语义验证,仅验证语法吗?

谢谢!

您正在使用 eval(),正如您可能猜到的那样,它会尝试 计算 表达式。

NashornScriptEngine 实现了 javax.script.Compilable,因此它提供了一个 compile() 方法。要使用它,您必须将 engine 转换为 NashornScriptEngine,如

NashornScriptEngine engine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");

如果编译失败,你会得到一个ScriptException