关于Drools评估的奇怪NullPointer

时间:2014-12-08 20:34:07

标签: drools business-rules

我正在使用Drools 5.4,并且在与此类似的代码块中体验过NPE:

rule "NPE sometimes"
   when
      $person : Person((name == null || name.last == null || name.last.empty),
         person.uniqueId != null)
   then
      log.error("Person has unique ID, but no last name");
end

如果尝试不按顺序评估中间表达式,则会发生错误:

Exception in thread "Thread-18" [Error: null pointer or function not found: last]
[Near : {... name == null || name.last == null || name....}]
                             ^

我知道规则引擎会尝试在可能的情况下进行优化。这种表达是不允许的,还是受到优化?

1 个答案:

答案 0 :(得分:0)

Drools 5.4是旧版本,对自由形式约束的支持可能并不完美。鉴于编译错误,您可以尝试使用name.getLast()代替name.last吗? 同样适用于name.last.empty。