/** * Construct a new {@code StandardScriptEvaluator} for the given class loader. * @param classLoader the class loader to use for script engine detection */ public StandardScriptEvaluator(ClassLoader classLoader) { this.scriptEngineManager = new ScriptEngineManager(classLoader); }
@Override public void setBeanClassLoader(ClassLoader classLoader) { ScriptEngineManager scriptEngineManager = this.scriptEngineManager; if (scriptEngineManager == null) { scriptEngineManager = new ScriptEngineManager(classLoader); this.scriptEngineManager = scriptEngineManager; Bindings bindings = this.globalBindings; if (bindings != null) { scriptEngineManager.setBindings(bindings); } } }
/** * Construct a new script eval exception with the specified original exception. */ public StandardScriptEvalException(ScriptException ex) { super(ex.getMessage()); this.scriptException = ex; }
import javax.script.ScriptEngineManager; import javax.script.ScriptEngine; public class Test { public static void main(String[] args) throws Exception{ ScriptEngineManager mgr = new ScriptEngineManager(); ScriptEngine engine = mgr.getEngineByName("JavaScript"); String foo = "40+2"; System.out.println(engine.eval(foo)); } }
private SelectorFunction compileSelectorFunction() { final ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); try { ((Compilable) engine).compile("var apply = " + function).eval(); return ((Invocable) engine).getInterface(SelectorFunction.class); } catch (ScriptException e) { throw new RuntimeException(e); } }
/** * create bindings for script engine */ private <T> Bindings createBindings(List<Invoker<T>> invokers, Invocation invocation) { Bindings bindings = engine.createBindings(); // create a new List of invokers bindings.put("invokers", new ArrayList<>(invokers)); bindings.put("invocation", invocation); bindings.put("context", RpcContext.getContext()); return bindings; }
@Override public <T> List<Invoker<T>> route(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException { try { Bindings bindings = createBindings(invokers, invocation); Compilable compilable = (Compilable) engine; CompiledScript function = compilable.compile(rule); return getRoutedInvokers(function.eval(bindings)); } catch (ScriptException e) { logger.error("route error, rule has been ignored. rule: " + rule + ", method:" + invocation.getMethodName() + ", url: " + RpcContext.getContext().getUrl(), e); return invokers; } }
static Bindings getBindings(Map<String, Object> bindings) { return (bindings instanceof Bindings ? (Bindings) bindings : new SimpleBindings(bindings)); }
public void setScriptEngineFactories(List<ScriptEngineFactory> scriptEngineFactories) { if (scriptEngineFactories != null) { for (ScriptEngineFactory scriptEngineFactory : scriptEngineFactories) { scriptEngineManager.registerEngineName(scriptEngineFactory.getEngineName(), scriptEngineFactory); } } }
public ScriptBindings(List<Resolver> scriptResolvers, VariableScope variableScope) { this.scriptResolvers = scriptResolvers; this.variableScope = variableScope; this.defaultBindings = new SimpleScriptContext().getBindings(SimpleScriptContext.ENGINE_SCOPE); }
/** * Set the globally scoped bindings on the underlying script engine manager, * shared by all scripts, as an alternative to script argument bindings. * @since 4.2.2 * @see #evaluate(ScriptSource, Map) * @see javax.script.ScriptEngineManager#setBindings(Bindings) * @see javax.script.SimpleBindings */ public void setGlobalBindings(Map<String, Object> globalBindings) { Bindings bindings = StandardScriptUtils.getBindings(globalBindings); this.globalBindings = bindings; ScriptEngineManager scriptEngineManager = this.scriptEngineManager; if (scriptEngineManager != null) { scriptEngineManager.setBindings(bindings); } }
ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("js"); Object result = engine.eval("4*5");
private SelectorFunction compileSelectorFunction() { final ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); try { ((Compilable) engine).compile("var apply = " + function).eval(); return ((Invocable) engine).getInterface(SelectorFunction.class); } catch (ScriptException e) { throw Throwables.propagate(e); } }
@Override public void setBeanClassLoader(ClassLoader classLoader) { ScriptEngineManager scriptEngineManager = this.scriptEngineManager; if (scriptEngineManager == null) { scriptEngineManager = new ScriptEngineManager(classLoader); this.scriptEngineManager = scriptEngineManager; Bindings bindings = this.globalBindings; if (bindings != null) { scriptEngineManager.setBindings(bindings); } } }
/** * Construct a new {@code StandardScriptEvaluator} for the given class loader. * @param classLoader the class loader to use for script engine detection */ public StandardScriptEvaluator(ClassLoader classLoader) { this.scriptEngineManager = new ScriptEngineManager(classLoader); }
/** * create bindings for script engine */ private <T> Bindings createBindings(List<Invoker<T>> invokers, Invocation invocation) { Bindings bindings = engine.createBindings(); // create a new List of invokers bindings.put("invokers", new ArrayList<>(invokers)); bindings.put("invocation", invocation); bindings.put("context", RpcContext.getContext()); return bindings; }
@Override public <T> List<Invoker<T>> route(List<Invoker<T>> invokers, URL url, Invocation invocation) throws RpcException { try { Bindings bindings = createBindings(invokers, invocation); Compilable compilable = (Compilable) engine; CompiledScript function = compilable.compile(rule); return getRoutedInvokers(function.eval(bindings)); } catch (ScriptException e) { logger.error("route error, rule has been ignored. rule: " + rule + ", method:" + invocation.getMethodName() + ", url: " + RpcContext.getContext().getUrl(), e); return invokers; } }
static Bindings getBindings(Map<String, Object> bindings) { return (bindings instanceof Bindings ? (Bindings) bindings : new SimpleBindings(bindings)); }
/** * Construct a new script eval exception with the specified original exception. */ public StandardScriptEvalException(ScriptException ex) { super(ex.getMessage()); this.scriptException = ex; }
public ScriptingEngines addScriptEngineFactory(ScriptEngineFactory scriptEngineFactory) { scriptEngineManager.registerEngineName(scriptEngineFactory.getEngineName(), scriptEngineFactory); return this; }