我正在使用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....}]
^
我知道规则引擎会尝试在可能的情况下进行优化。这种表达是不允许的,还是受到优化?
答案 0 :(得分:0)
Drools 5.4是旧版本,对自由形式约束的支持可能并不完美。鉴于编译错误,您可以尝试使用name.getLast()代替name.last吗? 同样适用于name.last.empty。