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;
}
}
}
這樣子就可以了。