在drools规则中,想要测试布尔字段isValid的值(注意:字段名称以“is”开头)。得到以下错误:
无法在规则'Test boolean stuff'中为'[ClassObjectType class = domain.SpecialObject]'的'isValid'创建Field Extractor:[Rule name ='Test boolean stuff'] 线程“main”中的异常java.lang.IllegalArgumentException:无法解析drl文件。
但是,规则中的另一个布尔字段“solid”可以正常工作。
环境:Drools版本 - 5.1.1,dialect = mvel
<Drl file>
import deshaw.compliance.regsys.dep.domain.SpecialObject;
dialect "mvel"
rule "Test boolean stuff"
no-loop
when
$obj: SpecialObject(isValid == true) // -->Problematic guy
//$obj: SpecialObject(solid == true) // -->This works fine
then
System.out.println("[SplObject]:Class=" + $obj.class + ";;;obj=" + $obj);
end
<domain object>
public class SpecialObject {
private boolean isValid;
private boolean solid;
public boolean isValid() {
return isValid;
}
public void setValid(boolean isValid) {
this.isValid = isValid;
}
public boolean isSolid() {
return solid;
}
public void setSolid(boolean solid) {
this.solid = solid;
}
}
注意:该类属于第三方lib,因此我无法更改“isValid”字段的名称
答案 0 :(得分:4)
尝试
when
$obj : SpecialObject( valid == true )
then
...
由于属性的访问者是isValid
,您应该从mvel中将其称为valid
。另一种方法是使用括号括号的完整方法名称。
字段名称本身无关紧要,但如果作者遵守命名标准会更好。