Drools求值上的奇怪空指针

Drools求值上的奇怪空指针,drools,business-rules,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 当试图

我正在使用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....}]
                             ^

我知道规则引擎会尽可能地进行优化。这种表达式是不允许的,还是需要进行优化?

Drools 5.4是较旧的版本,对自由形式约束的支持可能并不完美。鉴于编译错误,能否尝试使用name.getLast()代替name.last?
name.last.empty后面的名称相同

我非常怀疑这段代码是否与您实际拥有的代码“相似”。请发布一套完整的Java+DRL,再现您遇到的问题。而且错误在“评估”期间不会发生-它具有DRL编译器错误消息的所有特征,(堆栈转储呢?)不幸的是,我不能发布全部内容(甚至是真正的规则),我将在一篇我可以共享的帖子中重新创建问题。