java如何修复DROOL中“$emp\u id:emp\u id”中声明“$emp\u id”的字段读取器不存在的DROOL错误?
我正在开发drool(drl)POC,在该POC中,我使用反射在运行时创建JavaBean。我已在配置中设置了以下属性:
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
但我得到了以下错误:
Field Reader does not exist for declaration '$emp_id' in '$emp_id: emp_id' in the rule 'Rule - 1' : [Rule name='Rule - 1'] @line [I@4cb9v654...............
请求帮助,如何解决此问题
# 1 楼答案
错误试图说明Employee类没有可以访问的字段或方法来映射到您声明的
$emp_id
变量它查找前缀为“get”的公共方法或名为as is的公共变量
一个类似于以下任一项的Employee类定义将解决该错误
选项1:声明一个公共变量
emp_id
选项2:声明一个名为getEmp_id的公共方法
以下任一选项都将解决此问题,并允许您在规则中绑定
$emp_id
变量:(当然,我建议重命名为
empId
,然后实现这样的变量或getEmpId
方法,因为这遵循Java命名约定。当然,您仍然可以在drools$emp_id
中调用声明的变量。)