在DRools规则中遍历Null数组时出错

时间:2014-04-17 09:09:39

标签: java drools

我在.drl规则文件中使用arrayList。 在一个规则中,我检查列表是否为空并设置setFocus(第二规则)。 在第二个规则我从列表中获取元素,在此规则中我得到列表是空错误。

我想检查列表是否为空,并在一个规则中从该arraylist获取特定元素。

rule "Rule chesks client had already received Notifications or Not" 
salience 10   
no-loop true
when  
    event : Event($listOfClientNotifications : clientNotifications)
    eval($listOfClientNotifications < 1)   
then
    event.setMessage("list is null");
end  

第二条规则:

rule "Rule chesks " 
salience 05   
no-loop true
when  
    event : Event($listOfClientNotifications : clientNotifications)
    value : ClientNotifications() from $listOfClientNotifications; // <<< !!!
then  
    event.setMessage("Value "+**value.getMessage()**);
end   

<<< !!!是发生空错误的地方。

1 个答案:

答案 0 :(得分:0)

在一个规则中针对null测试列表(正确!)不会避免在另一个规则中运行到NPE。规则评估,重复,与规则执行,显着性和激活组同步。

这是一个正确的检查:

rule "check list is null"
when  
    event : Event(clientNotifications == null)
then
    event.setMessage("list is null");
end

防止遇到NPE

rule "use notifications from list"
when  
    event : Event($listOfClientNotifications : clientNotifications != null)
    value : ClientNotifications() from $listOfClientNotifications;
then  
    event.setMessage("Value "+ value.getMessage()); // strange, but maybe?
end