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

Drools 8.33决策表编译错误求助:fill对象无法解析

Drools 8.33决策表编译失败问题排查

我无法理解为何Drools(v8.33)编译我的决策表失败,错误指向规则#6,运行时输出如下:

Rule Compilation error : [Rule name='O6']
fill cannot be resolved
fill cannot be resolved
fill cannot be resolved
fill cannot be resolved
fill cannot be resolved
fill cannot be resolved

我怀疑问题在于规则#6的LHS仅包含Capacity条件,未定义“Exec Broker”中的fill对象,导致RHS动作无法访问该对象。有趣的是错误信息打印了6次(对应每个规则),但移除规则#6后决策表可正常编译运行。请问规则#6的Exec Broker应配置什么内容,或如何让fill对象在所有动作和条件中可用?

Drools 8.33决策表


问题原因与解决办法

核心原因

规则#6的LHS(条件部分)未声明fill对象的绑定,而RHS(动作部分)直接引用了fill变量,导致编译时无法解析该变量。其他规则大概率在“Exec Broker”列中定义了fill的绑定(比如fill: Fill()这类声明),但规则#6遗漏了该步骤,触发编译错误。

具体解决方式

  1. 为规则#6补充fill对象绑定:在规则#6的“Exec Broker”列中添加与其他规则一致的fill对象声明,例如fill: Fill()(具体语法需匹配你的业务对象类型)。这样LHS会将对应类型的对象绑定到fill变量,RHS就能正常访问该对象。
  2. 全局声明fill对象(不推荐):若需让fill在所有规则中通用,可将其声明为全局变量,但会破坏规则封装性,仅适合特殊场景:
    • 在DRL文件或决策表全局配置区添加:global com.yourpackage.Fill fill;
    • 在会话初始化时设置全局变量:kSession.setGlobal("fill", new Fill());

错误信息重复6次的说明

这是因为Drools编译时会校验规则的每一条动作语句,规则#6的RHS中有6处引用fill的动作,因此每处都会抛出一次“fill无法解析”的错误,最终显示6条重复信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:06:29