Drools 规则 - 针对布尔字段的书写规则,名称以“is”开头

Jag*_*aga 5 drools

在 drools 规则中,想要测试布尔字段 isValid 的值(注意:字段名称以“is”开头)。出现以下错误:

无法为规则“测试布尔内容”中的“[ClassObjectType class=domain.SpecialObject]”的“isValid”创建字段提取器:[规则名称=“测试布尔内容”]线程“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;
}

}
Run Code Online (Sandbox Code Playgroud)

注意:该类属于第三方库,因此我无法更改“isValid”字段的名称

ali*_*sal 5

尝试

when
  $obj : SpecialObject( valid == true )
then
   ...
Run Code Online (Sandbox Code Playgroud)

由于属性的访问器是isValid您应该从 mvel 引用它valid。另一种选择是使用带括号的完整方法名称。

字段名称本身是无关紧要的,尽管如果作者遵守命名标准会更好。