使用 Java Nashorn 引擎仅验证 javascript

Fab*_*o K 0 java validation syntax nashorn

早上好。

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

我使用以下方法对 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());
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢你!

Jim*_*son 5

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

实现NashornScriptEngine所以javax.script.Compilable它提供了一种compile()方法。要使用它,您必须强制转换engineNashornScriptEngine,如

NashornScriptEngine engine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");
Run Code Online (Sandbox Code Playgroud)

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