使用 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 抛出异常,指出 findFieldValue 和 field 都未定义,这是正确的。
我不需要这种验证。我所需要的只是验证语法,就像 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
。
早上好。
我需要通过 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 抛出异常,指出 findFieldValue 和 field 都未定义,这是正确的。 我不需要这种验证。我所需要的只是验证语法,就像 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
。