You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drools 7.57.0.Final模式匹配异常及规则重复触发问题咨询

问题解答

1. 规则匹配异常是否为Drools版本Bug

是,该问题属于Drools 7.44.0.Final到7.57.0.Final版本区间的已知MVEL方言Bug,官方已在7.58.0.Final及后续版本完成修复。
问题根因是该版本区间MVEL表达式在规则LHS(条件侧)做枚举值相等判断时,字节码生成逻辑出现错误,导致validation == Validation.UNKNOWN的判断条件被错误短路,无论枚举实际值是什么都会返回true,因此才会出现validation为FAILED的事实也触发该规则的异常现象。

2. 规则重复触发的原因

该问题是上述Bug的连锁反应:

  • 首先salience=20的「无效护照作废签证申请」规则将#1签证申请的validation设为FAILED,modify操作修改事实后触发规则重新评估
  • 由于MVEL枚举判断Bug,salience=10的「无校验信息标记为通过」规则错误匹配到validation为FAILED的#1申请,在RHS(执行侧)将其validation修改为PASSED
  • 事实再次被修改后,「无效护照作废签证申请」规则的LHS条件(visaApplication.validation != FAILED)再次满足,因此规则被第二次触发,也就出现了两次失效日志。

修复方案

可任选以下一种方式解决:

  • 升级Drools版本到7.58.0.Final或更高版本,直接使用官方修复后的版本
  • 无需升级版本的前提下,可将规则的dialect从mvel改为java,或者将枚举判断条件修改为validation.toString() == "UNKNOWN",即可绕过该Bug

复现方式:下载对应项目,将Drools版本改为7.57.0.Final,运行io.github.aasaru.drools.section06.VisaIssue类,交互时输入5选择对应步骤,询问是否所有护照过期时输入no即可复现上述日志。

内容的提问来源于stack exchange,提问作者trimtosize

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 10:24:03