mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
fix bug
This commit is contained in:
@@ -151,7 +151,12 @@ public class ScriptUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行Javascript脚本,返回Invocable
|
||||
* 执行Javascript脚本,返回Invocable,此方法分为两种情况:
|
||||
*
|
||||
* <ol>
|
||||
* <li>执行的脚本返回值是可执行的脚本方法</li>
|
||||
* <li>脚本为函数库,则ScriptEngine本身为可执行方法</li>
|
||||
* </ol>
|
||||
*
|
||||
* @param script 脚本内容
|
||||
* @return 执行结果
|
||||
@@ -159,11 +164,23 @@ public class ScriptUtil {
|
||||
* @since 5.3.6
|
||||
*/
|
||||
public static Invocable evalInvocable(String script) throws ScriptRuntimeException {
|
||||
return (Invocable) eval(script);
|
||||
final ScriptEngine jsEngine = getJsEngine();
|
||||
final Object eval;
|
||||
try {
|
||||
eval = jsEngine.eval(script);
|
||||
} catch (ScriptException e) {
|
||||
throw new ScriptRuntimeException(e);
|
||||
}
|
||||
if(eval instanceof Invocable){
|
||||
return (Invocable)eval;
|
||||
} else if(jsEngine instanceof Invocable){
|
||||
return (Invocable)jsEngine;
|
||||
}
|
||||
throw new ScriptRuntimeException("Script is not invocable !");
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行Javascript脚本
|
||||
* 执行有返回值的Javascript脚本
|
||||
*
|
||||
* @param script 脚本内容
|
||||
* @return 执行结果
|
||||
@@ -179,7 +196,7 @@ public class ScriptUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行脚本
|
||||
* 执行有返回值的脚本
|
||||
*
|
||||
* @param script 脚本内容
|
||||
* @param context 脚本上下文
|
||||
@@ -196,7 +213,7 @@ public class ScriptUtil {
|
||||
}
|
||||
|
||||
/**
|
||||
* 执行脚本
|
||||
* 执行有返回值的脚本
|
||||
*
|
||||
* @param script 脚本内容
|
||||
* @param bindings 绑定的参数
|
||||
|
@@ -0,0 +1,22 @@
|
||||
package cn.hutool.script.test;
|
||||
|
||||
|
||||
import cn.hutool.core.io.resource.ResourceUtil;
|
||||
import org.junit.Assert;
|
||||
|
||||
import javax.script.Invocable;
|
||||
import javax.script.ScriptEngine;
|
||||
import javax.script.ScriptEngineManager;
|
||||
import javax.script.ScriptException;
|
||||
|
||||
public class NashornDeepTest {
|
||||
|
||||
public static void main(String[] args) throws ScriptException, NoSuchMethodException {
|
||||
ScriptEngine engine = new ScriptEngineManager().getEngineByName("js");
|
||||
|
||||
engine.eval(ResourceUtil.readUtf8Str("filter1.js"));
|
||||
|
||||
final Object filter1 = ((Invocable) engine).invokeFunction("filter1", 1, 2);
|
||||
Assert.assertFalse((Boolean) filter1);
|
||||
}
|
||||
}
|
@@ -1,7 +1,9 @@
|
||||
package cn.hutool.script.test;
|
||||
|
||||
import cn.hutool.core.io.resource.ResourceUtil;
|
||||
import cn.hutool.script.ScriptRuntimeException;
|
||||
import cn.hutool.script.ScriptUtil;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import javax.script.CompiledScript;
|
||||
@@ -31,6 +33,12 @@ public class ScriptUtilTest {
|
||||
ScriptUtil.eval("print('Script test!');");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void invokeTest() {
|
||||
final Object result = ScriptUtil.invoke(ResourceUtil.readUtf8Str("filter1.js"), "filter1", 2, 1);
|
||||
Assert.assertTrue((Boolean) result);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void pythonTest() throws ScriptException {
|
||||
final ScriptEngine pythonEngine = ScriptUtil.getPythonEngine();
|
||||
|
6
hutool-script/src/test/resources/filter1.js
Normal file
6
hutool-script/src/test/resources/filter1.js
Normal file
@@ -0,0 +1,6 @@
|
||||
function filter1(a, b) {
|
||||
if (a > b) {
|
||||
return a > b;
|
||||
}
|
||||
return false;
|
||||
}
|
Reference in New Issue
Block a user