<br>   Wolfgang is right, as usual. Also, if I am not mistaken, if you are using the MVEL you can use ? to prevent the NPE. Something like:<br><br>person?.name?.firstName<br><br>   But this needs to be double checked. I never used it myself.<br>
<br>   []s<br>   Edson<br><br><div class="gmail_quote">2009/6/13 Wolfgang Laun <span dir="ltr">&lt;<a href="mailto:wolfgang.laun@gmail.com">wolfgang.laun@gmail.com</a>&gt;</span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
You have answered your question yourself: evaluation of patterns is<br>
done whenever a fact is added; salience will only order firings. Thus,<br>
the access person.name.firstName runs into the NPE.<br>
<br>
One way to cope with this would be to introduce a Name object which<br>
represents &quot;no name&quot;, available as a public static object in Name; use<br>
this to initialize Person objects. This will still let you detect the<br>
absence of a name (name == Name.noName) but it won&#39;t run into the NPE<br>
in your second rule.<br>
<font color="#888888"><br>
-W<br>
</font><div><div></div><div class="h5"><br>
On 6/12/09, surya_n2007 &lt;<a href="mailto:surya_n2007@yahoo.co.in">surya_n2007@yahoo.co.in</a>&gt; wrote:<br>
&gt;<br>
&gt; Throwing runtime exception in this example inserted person object as person<br>
&gt; name is null. Ideally need to add error<br>
&gt; &quot;P01&quot; and in second rule checks for precondition &quot;P01&quot; exist and skip rule.<br>
&gt; But i am getting the below error.<br>
&gt; Please let me know this is bug, i dont want to check again &quot;Second Rule&quot;<br>
&gt; name object is not null.<br>
&gt;  I think this is happening since drools frist try to run all rules before<br>
&gt; start execution.<br>
&gt;<br>
&gt; please let me know whether anything wrong on my end.<br>
&gt;<br>
&gt;<br>
&gt; Rule Engine COde :<br>
&gt;<br>
&gt;    Person person = test.new Person();<br>
&gt; // Name name = person.new Name();<br>
&gt; // person.setName(name);<br>
&gt;    workingMemory.insert(person);<br>
&gt;<br>
&gt;<br>
&gt; rule &quot;First Rule&quot; salience 100 lock-on-active true<br>
&gt; when<br>
&gt;         person : Person()<br>
&gt;         eval(<a href="http://person.name" target="_blank">person.name</a> == null)<br>
&gt; then<br>
&gt;         person.errors.add(&quot;P01&quot;);<br>
&gt;         System.out.println(&quot;Rule 1 invoked&quot;+person.errors);<br>
&gt;         update(person);<br>
&gt; end<br>
&gt;<br>
&gt; rule &quot;Second Rule&quot; salience 99 lock-on-active true<br>
&gt; when<br>
&gt;         person : Person()<br>
&gt;         eval(!person.errors.contains(&quot;P01&quot;))<br>
&gt;         eval(person.name.firstName==&quot;Bob&quot;)<br>
&gt; then<br>
&gt;         person.name.suffix=&quot;Mr&quot;;<br>
&gt;         System.out.println(&quot;Rule 2 invoked&quot;);<br>
&gt; end<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; org.drools.RuntimeDroolsException:<br>
&gt; com.sample.Rule_Second_Rule_0Eval1Invoker@4b42aa1e :<br>
&gt; java.lang.NullPointerException<br>
&gt;         at org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:82)<br>
&gt;         at<br>
&gt; org.drools.reteoo.EvalConditionNode.assertTuple(EvalConditionNode.java:148)<br>
&gt;         at<br>
&gt; org.drools.reteoo.SingleTupleSinkAdapter.propagateAssertTuple(SingleTupleSinkAdapter.java:29)<br>
&gt;         at<br>
&gt; org.drools.reteoo.EvalConditionNode.assertTuple(EvalConditionNode.java:157)<br>
&gt;         at<br>
&gt; org.drools.reteoo.CompositeTupleSinkAdapter.createAndPropagateAssertTuple(CompositeTupleSinkAdapter.java:73)<br>
&gt;         at<br>
&gt; org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:116)<br>
&gt;         at<br>
&gt; org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:22)<br>
&gt;         at<br>
&gt; org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:162)<br>
&gt;         at org.drools.reteoo.Rete.assertObject(Rete.java:175)<br>
&gt;         at<br>
&gt; org.drools.reteoo.ReteooRuleBase.assertObject(ReteooRuleBase.java:192)<br>
&gt;         at<br>
&gt; org.drools.reteoo.ReteooWorkingMemory.doInsert(ReteooWorkingMemory.java:71)<br>
&gt;         at<br>
&gt; org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:911)<br>
&gt;         at<br>
&gt; org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:883)<br>
&gt;         at<br>
&gt; org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:684)<br>
&gt;         at com.sample.DroolsTest.main(DroolsTest.java:36)<br>
&gt; Caused by: java.lang.NullPointerException<br>
&gt;         at com.sample.Rule_Second_Rule_0.eval1(Rule_Second_Rule_0.java:14)<br>
&gt;         at<br>
&gt; com.sample.Rule_Second_Rule_0Eval1Invoker.evaluate(Rule_Second_Rule_0Eval1Invoker.java:20)<br>
&gt;         at org.drools.rule.EvalCondition.isAllowed(EvalCondition.java:77)<br>
&gt;         ... 14 more<br>
&gt; --<br>
&gt; View this message in context:<br>
&gt; <a href="http://www.nabble.com/Throwing-runtimeException-4.0.7-not-supposed-tp24005070p24005070.html" target="_blank">http://www.nabble.com/Throwing-runtimeException-4.0.7-not-supposed-tp24005070p24005070.html</a><br>

&gt; Sent from the drools - dev mailing list archive at Nabble.com.<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; rules-dev mailing list<br>
&gt; <a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
&gt; <a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
&gt;<br>
_______________________________________________<br>
rules-dev mailing list<br>
<a href="mailto:rules-dev@lists.jboss.org">rules-dev@lists.jboss.org</a><br>
<a href="https://lists.jboss.org/mailman/listinfo/rules-dev" target="_blank">https://lists.jboss.org/mailman/listinfo/rules-dev</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>  Edson Tirelli<br>  JBoss Drools Core Development<br>  JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a><br>