早上好。
我需要通过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
我的问题是。我可以用Nashorn忽略语义验证,只验证语法吗?
谢谢您!
你在用 eval() 正如你可能猜到的,它试图 评价 表达方式。
eval()
这个 NashornScriptEngine 工具 javax.script.Compilable 所以它提供了 compile() 方法。要使用它,你必须 engine 到 纳索恩脚本引擎 ,如
NashornScriptEngine
javax.script.Compilable
compile()
engine
纳索恩脚本引擎
NashornScriptEngine engine = (NashornScriptEngine) new ScriptEngineManager().getEngineByName("nashorn");
你得到一个 ScriptException 如果编译失败。
ScriptException