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

在Drools函数中访问全局变量时抛出异常求助

Drools函数访问全局变量异常的解决方案

问题根源

Drools自定义函数不能直接引用全局变量,必须通过KieRuntime上下文获取全局变量实例,否则会触发变量未解析的编译错误。

修正代码

Java代码(修复语法遗漏)

List<String> stringList = new ArrayList<>();
droolSession.setGlobal("stringList", stringList); // 补充分号
droolSession.fireAllRules();

DRL代码(通过上下文获取全局变量)

有两种可行写法:

方式1:传入KieRuntime

import org.kie.api.runtime.KieRuntime;

global java.util.List stringList;

function void addString(KieRuntime kRuntime, String s){
    java.util.List list = (java.util.List) kRuntime.getGlobal("stringList");
    list.add(s);
}

方式2:传入RuleContext(规则内调用时使用)

global java.util.List stringList;

function void addString(org.kie.api.runtime.rule.RuleContext kcontext, String s){
    java.util.List list = (java.util.List) kcontext.getKieRuntime().getGlobal("stringList");
    list.add(s);
}

// 规则中调用示例
rule "Add String Rule"
when
then
    addString(kcontext, "example string");
end

注意事项

  • 全局变量的类型声明需与Java代码中设置的类型严格匹配
  • 调用自定义函数时,必须传入KieRuntime或RuleContext参数,才能正确获取全局变量实例

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 22:57:12