浏览代码

add methods

Looly 5 年之前
父节点
当前提交
40f97b3864
共有 2 个文件被更改,包括 34 次插入2 次删除
  1. 2 1
      CHANGELOG.md
  2. 32 1
      hutool-script/src/main/java/cn/hutool/script/ScriptUtil.java

+ 2 - 1
CHANGELOG.md

@@ -17,7 +17,8 @@
 * 【core   】     支持BeanUtil.toBean(object, Map.class)转换(issue#I1I4HC@Gitee)
 * 【core   】     MapUtil和CollUtil增加clear方法(issue#I1I4HC@Gitee)
 * 【core   】     增加FontUtil,可定义pressText是否从中间(issue#I1HSWU@Gitee)
-* 【core   】     SoapClient支持自定义请求头(issue#I1I0AO@Gitee)
+* 【http   】     SoapClient支持自定义请求头(issue#I1I0AO@Gitee)
+* 【script 】     ScriptUtil增加evalInvocable和invoke方法(issue#I1HHCP@Gitee)
 
 ### Bug修复
 * 【core   】     修复SimpleCache死锁问题(issue#I1HOKB@Gitee)

+ 32 - 1
hutool-script/src/main/java/cn/hutool/script/ScriptUtil.java

@@ -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 脚本内容