执行方法是
其执行结果是:
/**
* @param jsCode
* javaScript
* @param methodName
* function name
* @param args
* function params
* @return
* @throws ScriptException
* @throws NoSuchMethodException
*/
public static Object execJs(String jsCode, String methodName,
Object... args) throws ScriptException, NoSuchMethodException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
engine.eval(jsCode);
Invocable invocable = (Invocable) engine;
Object obj = invocable.invokeFunction(methodName, args);
return obj;
}
javascript中的语法如下:
/**
* 使用自定义java类
* @param src
* @param regex
* @returns {String}
*/
function test(src, regex) {
importClass(Packages.com.test.util.RegexUtil);
return RegexUtil.pattern(src, regex);
}
/**
* 使用JavaApi的类
* @param list
* @returns {Boolean}
*/
function test2(list) {
var str = new java.lang.String(list.get(1));
return str.startsWith("EN") && str.endsWith("CN");
}
/**
* 调用js中的其他方法
* @param str
*/
function test3(str) {
java.lang.System.out.println("----test3 start----");
// 判断参数类型
if (Object.prototype.toString.apply(str) == '[object String]') {
java.lang.System.out.println(new java.lang.String(str));
}
test4();
java.lang.System.out.println("----test3 end----");
}
function test4() {
java.lang.System.out.println("test4()");
}
/**
* 异常处理
*/
function test5() {
try {
throw new java.lang.Exception("测试");
} catch (e) {
java.lang.System.out.println(e.getMessage());
}
}
其中test使用的java类是:
package com.test.util;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexUtil {
public static boolean pattern(String src, String regex) {
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(src);
return matcher.find();
}
}
测试使用test,test1,test2,test3和test5方法及结果
public static void main(String[] args) throws Exception {
String js = IOUtils.toString(TestExecJs.class.getClassLoader()
.getResourceAsStream("test.js"));
//System.out.println(js);
Boolean b = (Boolean) execJs(js, "test", "11", "^(R[A-Z])|LH|LX");
System.out.println(b);
List<String> list = new ArrayList<String>();
list.add("list1");
list.add("EN234501CN");
System.out.println(execJs(js, "test2", list));
execJs(js, "test3", "测试test3");
execJs(js, "test3", 1234);
execJs(js, "test4");
execJs(js, "test5");
}
其执行结果是:
false
true
----test3 start----
测试test3
test4()
----test3 end----
----test3 start----
test4()
----test3 end----
test4()
测试