当我试图从drool函数访问全局变量时,我得到了一个异常:
抛出异常;嵌套异常是java.lang。运行时异常:无法获取KieModule,存在错误:错误信息:消息[id=1,kieBase=defaultKieBase,level=ERROR,path=insuranceperiod.drl,line= -1,column=0 text=导入时出错:'KieRule.AddString.addString']消息[id=2,kieBase=defaultKieBase,level=ERROR,path=insuranceperiod.drl,line=15,column=0 text=[ function addStringaddString(line:15):无法解析stringList]]
代码如下:
*Java代码
List<String> stringList = new ArrayList<>();
droolSession.setGlobal("stringList",stringList)
droolSession.fireAllRules();
*drl编码
global java.util.List stringList;
function void addString(String s){
stringList.add(s);
}
尝试访问drool函数内部的全局变量
1条答案
按热度按时间voase2hg1#
不能从DRL函数体访问DRL全局。
理由如下:DRL函数等效于Java
static
方法。DRL全局可以被认为类似于示例字段(正如您在代码片段中看到的,您在Session示例上设置全局值,而不是KBase)。与Java类似,您不能从静态方法访问示例字段。如果你试图在Java中将
static void addString(String s) {...}
定义为一个静态方法,然后从RHS中使用它,你会遇到类似的问题:静态方法的定义对stringList
示例没有作用域访问权限。您总是可以重构代码以符合范围可见性,并以不同的方式满足您的需求。