java 如何修复DROOL错误“对于”$emp_id“中的声明”$emp_id“,字段读取器不存在:emp_id' in drool?

e5nszbig  于 2023-04-10  发布在  Java
关注(0)|答案(1)|浏览(165)

我正在开发一个drool(drl)POC,在运行时使用反射创建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”的字段读取器不存在规则“Rule - 1”中的emp_id:[Rule name='Rule - 1'] @line [I@4cb9v654...............
请求帮助,如何解决?

gr8qqesn

gr8qqesn1#

这个错误试图说明Employee类没有可以访问的字段或方法来Map到您声明的$emp_id变量。
它查找前缀为'get'的公共方法或名为as-is的公共变量。
类似于以下任一项的Employee类定义将解决此错误。
选项1:声明一个公共变量emp_id

public class Employee {
  public String emp_id;
}

选项2:声明一个名为getEmp_id的公共方法。

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

以下任一选项都可以解决此问题,并允许您在规则中绑定$emp_id变量:

Employee( $emp_id: emp_id )

(当然,我建议重命名为empId,然后实现这样的变量或getEmpId方法,因为这遵循Java命名约定。当然,您仍然可以在drools $emp_id中调用声明的变量。)

相关问题