1.背景
想使用janino 加载自定义函数。我是这么做的,开始的做法
【janino】janino自定义函数报错A method named “xx” is not declared in any enclosing class nor through a static
后来尝试
@Test
public void janinoPerformanceTest2_1() throws Exception {
String rule = "containsIgnoreCase(requestUrl,\"securityEyeLogType\")";
IExpressionEvaluator evaluator = CompilerFactoryFactory.getDefaultCompilerFactory().newExpressionEvaluator();
evaluator.setExpressionType(boolean.class);
evaluator.setExtendedClass(JaninoContainsIgnoreCaseFunction.class);
// evaluator.setDefaultImports(new String[]{
// "static com.janino.demo.function.JaninoContainsIgnoreCaseFunction"
// });
// evaluator.setClassName("com.janino.demo.function.JaninoContainsIgnoreCaseFunction");
// evaluator.setStaticMethod(true);
evaluator.setParameters(
new String[]{"requestUrl"},
new Class[]{String.class}
);
evaluator.cook(rule);
Object[] arguments = {"securityEyeLogType"};
Object res = evaluator.evaluate(arguments);
System.out.println(res);
}
上面注释的都不能加载静态函数,函数如下
public class JaninoContainsIgnoreCaseFunction {
public static boolean containsIgnoreCase(String field, String target) {
if (field.toLowerCase().contains(target.toLowerCase())) {
return true;
} else {
return false;
}
}
}
这样子就可以了。