add methods

This commit is contained in:
Looly
2020-05-26 01:09:26 +08:00
parent 0543cec440
commit 40f97b3864
2 changed files with 34 additions and 2 deletions

View File

@@ -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));
}
/**
@@ -149,6 +150,18 @@ public class ScriptUtil {
return createScript("groovy");
}
/**
* 执行Javascript脚本返回Invocable
*
* @param script 脚本内容
* @return 执行结果
* @throws ScriptRuntimeException 脚本异常
* @since 5.3.6
*/
public static Invocable evalInvocable(String script) throws ScriptRuntimeException {
return (Invocable) eval(script);
}
/**
* 执行Javascript脚本
*
@@ -199,6 +212,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脚本
*