工具类如下:
public static String evaluate(String expression, ModelData modelData) {
ExpressionFactory factory = ExpressionFactory.getInstance();
Expression expr = factory.getExpression(expression);
Set fieldSet = expr.getVariableNames();
expr.addFunction(new SubString());
expr.addFunction(new MD5());
for (String fieldName : fieldSet) {
if (null == expr.getVariableValue(fieldName)) {
String fvalue = modelData.getFieldValue(fieldName);
expr.setVariableValue(fieldName, fvalue);
}
}
Valuable result = expr.evaluate();
return (result.getValue() == null) ? "" : result.getValue().toString();
}
多线程访问的时候会出现:
neu.sxc.expression.syntax.ArgumentsMismatchException:the operator(or method) judge(boolean,String,String) is undefined for the arguments (String)
还有:
neu.sxc.expression.syntax.ArgumentsMismatchException:the operator(or method) md5(String) is undefined for the argumenge(boolean,String,String)
md5函数是我自定义的函数,judge是系统的自带函数,貌似多线程处理的时候将这两个函数搞混了。在出错的时候打印对应的表达式和参数信息,均无误,但是就是执行的时候会偶尔出错。搞不通- - 求用过的大神帮帮忙。
ps:单线程跑没有一点问题。