我有一个简单的Drools规则,我将字符串转换为整数,然后将其与另一个整数进行比较。像这样:
when
$list : List(size > 0 )
$m1 : Map() from $list.get(0)
$var1 : Map(stringToInt(this["number"]) <= 0) from $list.get(0)
这应该在转换后检查我的地图中字符串值“number”是否小于或等于0。 stringToInt只是我编写的一个帮助函数,它调用Integer.parseInt并捕获异常。
当我尝试运行规则时,我收到此错误:
java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean
at org.mvel2.ast.Negation.getReducedValueAccelerated(Negation.java:48)
方言设置为java,我的drools版本为6.4.0。我该如何解决这个错误?
编辑:字符串到int:
public static int stringToInt(String s) {
try {
int num = Integer.parseInt(s);
return num;
} catch (Exception e) {
return -1;
}
}
答案 0 :(得分:0)
这适合我。
创建会话,默认情况下为所有选项。插入:
Map<String,String> map = new HashMap<>();
map.put( "number", "4711" );
List<Map<String,String>> list = new ArrayList<>();
list.add( map );
kieSession.insert( list );
运行drl:
import static map.Main.stringToInt;
import java.util.*;
rule "int from map"
when
$list : List(size > 0 )
$m1 : Map() from $list.get(0)
$var1 : Map(stringToInt(this["number"]) > 0 ) from $list.get(0)
then
System.out.println( "got 4711" );
end
我甚至保留了冗余的第一个(空)Map
模式。
检查您的类路径是否包含mvel2-2.2.8.Final.jar
而不包含其他版本。 (这是班级Negation
所在的位置。)
检查您是否已在代码中报告规则,而不是省略异常的实际触发器。