如何修复 DROOL 错误“Field Reader does not exist for declaration '$emp_id' in '$emp_id : emp_id' in drool?
How to fix the DROOL error "Field Reader does not exist for declaration '$emp_id' in '$emp_id : emp_id' in drool?
我正在开发一个 drool(drl) POC,我在其中使用反射在 运行 时间创建了 java 个 bean。我在配置中设置了以下 属性:
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...............
请求帮助,如何解决?
该错误试图说明您的员工 class 没有可以访问以映射到您已声明的 $emp_id
变量的字段或方法。
它查找以 'get' 为前缀的 public 方法,或原样命名的 public 变量。
类似于以下任一内容的 Employee class 定义将解决错误。
选项 1:声明一个 public 变量 emp_id
。
public class Employee {
public String emp_id;
}
选项 2:声明一个名为 getEmp_id 的 public 方法。
public class Employee {
public String getEmp_id() { return "..."; }
}
这些选项中的任何一个都可以解决问题并允许您在规则中绑定 $emp_id
变量:
Employee( $emp_id: emp_id )
(当然,我建议重命名为 empId
,然后实现这样的变量或 getEmpId
方法,因为这遵循 Java 命名约定。您仍然可以当然,在流口水 $emp_id
中调用您声明的变量。)
我正在开发一个 drool(drl) POC,我在其中使用反射在 运行 时间创建了 java 个 bean。我在配置中设置了以下 属性:
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...............
请求帮助,如何解决?
该错误试图说明您的员工 class 没有可以访问以映射到您已声明的 $emp_id
变量的字段或方法。
它查找以 'get' 为前缀的 public 方法,或原样命名的 public 变量。
类似于以下任一内容的 Employee class 定义将解决错误。
选项 1:声明一个 public 变量 emp_id
。
public class Employee {
public String emp_id;
}
选项 2:声明一个名为 getEmp_id 的 public 方法。
public class Employee {
public String getEmp_id() { return "..."; }
}
这些选项中的任何一个都可以解决问题并允许您在规则中绑定 $emp_id
变量:
Employee( $emp_id: emp_id )
(当然,我建议重命名为 empId
,然后实现这样的变量或 getEmpId
方法,因为这遵循 Java 命名约定。您仍然可以当然,在流口水 $emp_id
中调用您声明的变量。)