Drools имеет множество встроенных проверок на null, но если вы настаиваете на обходе, вы получите много ошибок.
Другой интересный вид Drools - это особые синтаксис для карт - get("foo")
можно записать как this["foo"]
.
rule "drools1"
when
Model( id == "1", // equivalent to getId().equals("1")
$map: map != null )
// Special syntax for getting stuff from maps:
Map( $param1: this["param1"] != null ) from $map
ParameterModel( $value: value != null ) from $param1
Integer( this > 10 ) from Integer.parseInt($value.toString())
then
System.out.println("Error on " + drools.getRule().getName());
end
Почему ваша версия давала NPE? Понятия не имею, но в исходной форме это было почти нечитаемо. Все, что действительно можно было почерпнуть из трассировки стека, это то, что это происходило на каком-то этапе неявного преобразования. 1013 * превращается в строковое представление целого числа.
Обратите внимание, что если value
является на самом деле целочисленным типом, вам не нужно тратить время на синтаксический анализ int и можно просто сделайте:
Integer(this > 10) from $value