Drools规则when子句触发mismatched input '.' in rule错误如何解决
问题根因
Drools规则的when语法块只允许接收两类语句:
- 事实对象绑定语句(如你写的
$grievances:GrievanceDTO(...)) - 包裹在
eval函数内的自由表达式,或者绑定在事实对象后括号内的属性约束
你在第一行绑定事实之后,直接裸写$grievances.getSubcategory().equals(...)这类语句,不符合Drools的语法规范,因此抛出.符号不匹配的报错。
修复方案
推荐使用Drools原生支持的POJO属性约束写法,所有属性校验直接放在绑定事实后的括号内,无需手动调用getter、也不用手动写equals方法,Drools会自动处理:
rule "grievancesMap_10" when $grievances:GrievanceDTO( category == "NA", subcategory == "Access/Availability", subIssue == "NA", issueReason == "NA", providerAccessType == "NA", subcareType == "NA" ) then $grievances.setServiceType("Timely Access"); end
如果需要保留你原有拆分写法的结构,可以用eval函数包裹所有自由表达式(不推荐,会降低规则匹配性能):
rule "grievancesMap_10" when $grievances:GrievanceDTO($grievances.getCategory().equals("NA")) eval($grievances.getSubcategory().equals("Access/Availability")) eval($grievances.getSubIssue().equals("NA")) eval($grievances.getIssueReason().equals("NA")) eval($grievances.getProviderAccessType().equals("NA")) eval($grievances.getSubcareType().equals("NA")) then $grievances.setServiceType("Timely Access"); end
内容的提问来源于stack exchange,提问作者cluis92
相关产品推荐
相关产品推荐

