我正在开发一个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...............
请求帮助,如何解决?
1条答案
按热度按时间gr8qqesn1#
这个错误试图说明Employee类没有可以访问的字段或方法来Map到您声明的
$emp_id
变量。它查找前缀为'get'的公共方法或名为as-is的公共变量。
类似于以下任一项的Employee类定义将解决此错误。
选项1:声明一个公共变量
emp_id
。选项2:声明一个名为getEmp_id的公共方法。
以下任一选项都可以解决此问题,并允许您在规则中绑定
$emp_id
变量:(当然,我建议重命名为
empId
,然后实现这样的变量或getEmpId
方法,因为这遵循Java命名约定。当然,您仍然可以在drools$emp_id
中调用声明的变量。)