在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
相关产品推荐
相关产品推荐

