Jboss drools 抛出错误无法分析布尔变量的表达式

Jboss drools throwing error Unable to Analyse Expression for boolean variable

我有一个非常简单的测试用例来奖励第一次注册的玩家。当我 运行 我的测试用例出错时。

Message [id=1, kieBase=defaultKieBase, level=ERROR, path=player.drl, line=10, column=0
text=Unable to Analyse Expression isNew == true:
[Error: no such identifier: isNew]
[Near : {... isNew == true ....}]
^ [Line: 10, Column: 8]]

我检查了模型 class 是否正确声明了变量并且引用了 .drl 文件。

Player.drl

import com.xyz.model.business.objects.Player;
import com.xyz.rules.domain.Points;
import java.util.*;

global com.xyz.rules.domain.Points points;
dialect  "mvel"

rule "Reward Point if User registered"
    when
        playerInstance:Player(isNew == true);
    then
        points.setPoints(1000);
end

型号Class

package com.xyz.model.business.objects;    
import lombok.Builder;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Builder(toBuilder = true)
public class Player {        
        private String userId;
        private String name;
        private int age;
        private boolean isNew;
}

您应该为 bean/模型属性实现 getters。由于 new 是 Java 中的保留字,我会用 new_ 替换它。因为 属性 类型是 boolean getter 名称是 isNew_ 而不是 getNew_.

规则

Player(isNew == true)替换为Player(new_ == true)

型号

替换

private boolean isNew;

private boolean new_;
public boolean isNew_() {
    return new_;
}

我看到 lombok 正在生成方法,布尔方法如下所示

public boolean isNew() {
    return isNew;
}

public void setNew(boolean aNew) {
    isNew = aNew;
}

但是当我明确添加 get/set 时,流口水就明白了。

getXXX() & setXXX()

所以不是自动生成的。我明确地为布尔值和 voila

设置了 get & set
   public boolean getIsNew() {
        return isNew;
    }

    public void setNew(boolean aNew) {
        isNew = aNew;
    }