早上好。
我需要运行通过Java JavaScript语法验证,但我在努力寻找最佳的解决方案。
我做了一些测试与犀牛使用以下方法:
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());
}
犀牛抛出一个异常,说既findFieldValue和现场是不确定的,这是正确的。我不需要这种验证。所有我需要的是验证语法,就像它是由Esprima JS API完成
http://esprima.org/demo/validate.html
我的问题是。我可以忽略语义验证与犀牛,只验证语法?
谢谢!
您正在使用eval()
,正如你可能已经猜到了,试图计算表达式。
所述NashornScriptEngine
实现javax.script.Compilable
因此它提供了一种方法compile()
。要使用它,你将不得不投engine
到NashornScriptEngine
,如
NashornScriptEngine engine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");
你得到一个ScriptException
如果编译失败。