|
|
@@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
|
|
|
import javax.script.Bindings;
|
|
|
import javax.script.Compilable;
|
|
|
import javax.script.CompiledScript;
|
|
|
+import javax.script.Invocable;
|
|
|
import javax.script.ScriptContext;
|
|
|
import javax.script.ScriptEngine;
|
|
|
import javax.script.ScriptEngineManager;
|
|
|
@@ -28,7 +29,7 @@ public class ScriptUtil {
|
|
|
* @return {@link ScriptEngine} 实例
|
|
|
*/
|
|
|
public static ScriptEngine getScript(String nameOrExtOrMime) {
|
|
|
- return CACHE.get(nameOrExtOrMime, ()-> createScript(nameOrExtOrMime));
|
|
|
+ return CACHE.get(nameOrExtOrMime, () -> createScript(nameOrExtOrMime));
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -150,6 +151,18 @@ public class ScriptUtil {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 执行Javascript脚本,返回Invocable
|
|
|
+ *
|
|
|
+ * @param script 脚本内容
|
|
|
+ * @return 执行结果
|
|
|
+ * @throws ScriptRuntimeException 脚本异常
|
|
|
+ * @since 5.3.6
|
|
|
+ */
|
|
|
+ public static Invocable evalInvocable(String script) throws ScriptRuntimeException {
|
|
|
+ return (Invocable) eval(script);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 执行Javascript脚本
|
|
|
*
|
|
|
* @param script 脚本内容
|
|
|
@@ -200,6 +213,24 @@ public class ScriptUtil {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
+ * 执行JS脚本中的指定方法
|
|
|
+ *
|
|
|
+ * @param script js脚本
|
|
|
+ * @param func 方法名
|
|
|
+ * @param args 方法参数
|
|
|
+ * @return 结果
|
|
|
+ * @since 5.3.6
|
|
|
+ */
|
|
|
+ public static Object invoke(String script, String func, Object... args) {
|
|
|
+ final Invocable eval = evalInvocable(script);
|
|
|
+ try {
|
|
|
+ return eval.invokeFunction(func, args);
|
|
|
+ } catch (ScriptException | NoSuchMethodException e) {
|
|
|
+ throw new ScriptRuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
* 编译Javascript脚本
|
|
|
*
|
|
|
* @param script 脚本内容
|