Правило Drools возвращает значение null (не срабатывает?)

#drools #rules #kie

#drools #Правила #kie

Вопрос:

Я новичок в drools. Я создал следующий объект:

 package com.myspace.applicant;

public class Applicant implements java.io.Serializable {

    static final long serialVersionUID = 1L;

    private java.lang.Integer age;
    private java.lang.Boolean approved;
    private java.lang.Double money;
    private java.lang.String name;

    public Applicant() {
    }

    public java.lang.Integer getAge() {
        return this.age;
    }

    public void setAge(java.lang.Integer age) {
        this.age = age;
    }

    public java.lang.Boolean getApproved() {
        return this.approved;
    }

    public void setApproved(java.lang.Boolean approved) {
        this.approved = approved;
    }

    public java.lang.Double getMoney() {
        return this.money;
    }

    public void setMoney(java.lang.Double money) {
        this.money = money;
    }

    public java.lang.String getName() {
        return this.name;
    }

    public void setName(java.lang.String name) {
        this.name = name;
    }

    public Applicant(java.lang.Integer age, java.lang.Boolean approved,
            java.lang.Double money, java.lang.String name) {
        this.age = age;
        this.approved = approved;
        this.money = money;
        this.name = name;
    }

}
 

и файл * .drl, содержащий правило:

 package com.myspace.applicant;

import com.myspace.applicant.Applicant;

no-loop

rule "approve applicants"
when
    $a: Applicant(age > 30, money > 1000, approved == false)
then
    modify($a) {
        setApproved(true);
    }
end
 

В Postman я попытался вызвать правило со следующим телом:

 {
    "lookup" : null,
    "commands" : [ {
        "insert" : {
            "objects" : {
                "Applicant": {
                    "age": 28,
                    "approved": false,
                    "money": 10000,
                    "name": "boehlen"
                }
            },
            "disconnected" : false,
            "out-identifier": "Applicant",
            "return-object" : true,
            "entry-point" : "DEFAULT"
        }
    }, {
        "fire-all-rules" : {}
    } ]
}
 

Я получил следующий ответ:

 {
  "type" : "SUCCESS",
  "msg" : "Container Applicant_1.0.0-SNAPSHOT successfully called.",
  "result" : {
    "execution-results" : {
      "results" : [ {
        "value" : null,
        "key" : "Applicant"
      } ],
      "facts" : [ {
        "value" : null,
        "key" : "Applicant"
      } ]
    }
  }
}
 

Проблема в том, что мое значение равно null вместо объекта, который я ожидаю в качестве ответа. Server.log пуст, и я не вижу, что не так. Пожалуйста, не могли бы вы мне помочь.

Большое вам спасибо.

Ответ №1:

Ваше правило срабатывает только в том случае, если возраст заявителя превышает 30 лет. Ваше входное значение включает возраст 28 лет.

Комментарии:

1. Большое вам спасибо за ваш ответ. Я изменил значение на 31. Все тот же результат, => null . Итак, ничего не изменилось.

Ответ №2:

Я смог решить проблему. Это была опечатка. Вместо «результатов» мне пришлось написать «результат». Спасибо