Как исправить ошибку DROOL «Поле Reader не существует для объявления '$ emp_id' в '$ emp_id: emp_id' в слюне? - PullRequest
0 голосов
/ 14 июля 2020

Я работаю над слюной (drl) PO C, в которой я создаю java beans во время выполнения, используя отражение. Я установил следующее свойство в конфигурации:

KnowledgeBuilderConfiguration config = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration();
config.setProperty("drools.dialect.default", "mvel");

//drl sample:
package script.demo
dialect "mvel"
import Employee;
rule "Rule - 1"
    when
        $emp: Employee($emp_id: emp_id)
    then
        System.out.println("emp id: "+$emp.emp_id);
end

Но я получаю ошибку ниже:

Не существует средства чтения поля для объявления '$ emp_id' в '$ emp_id : emp_id 'в правиле' Правило - 1 ': [Rule name =' Правило - 1 '] @line [I@4cb9v654...............

Запрос помощи, как решить эту проблему?

1 Ответ

0 голосов
/ 15 июля 2020

Ошибка пытается сказать, что ваш класс Employee не имеет поля или метода, к которому он может получить доступ для сопоставления с объявленной вами переменной $emp_id.

Он ищет либо publi c метод с префиксом 'get' или переменная publi c с именем как есть.

Определение класса Employee, которое выглядит как одно из следующих, устранит ошибку.

Вариант 1: объявить publi c переменную emp_id.

public class Employee {
  public String emp_id;
}

Вариант 2: объявить publi c метод с именем getEmp_id.

public class Employee {
  public String getEmp_id() { return "..."; }
}

Любой из этих вариантов решит проблему и позвольте вам связать переменную $emp_id в вашем правиле:

Employee( $emp_id: emp_id )

(я бы рекомендовал, конечно, переименовать в empId, а затем реализовать либо такую ​​переменную, либо метод getEmpId, поскольку это соответствует Java соглашениям об именах. Вы все еще можете вызывать объявленную переменную в слюнях $emp_id, конечно.)

...