I have a dummy program that asserts 2 simple facts into working memory, then reads a simple rule file into the rule base, then fires the rules. I&#39;ve attached the rules and the NullPointerException that results.<br><br>
However, if I read the rules first then assert the facts, the program runs fine. <br><br>Alternatively, if I modify the second rule such that the modify occurs before the retract, the program runs fine even if I assert the facts first then read the rules.
<br>&nbsp;<br>In general, I may not be able to control when facts are asserted vs. when rules are read in. Should this be a problem?<br><br>Any hints greatly appreciated!!<br><br>Thanks,<br>Justine<br><br>simple.drl:<br><br>rule &quot;setupFactC&quot;
<br>no-loop true<br>&nbsp;&nbsp;&nbsp; when<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a: factA(s:field1, i:field2, f:field3)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; not c : factC(f1==s)<br>&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assert(s != null ? new factC(s, i, f) :<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new factC());
<br>end<br><br>rule &quot;factBWithRetract&quot;<br>no-loop true<br>&nbsp;&nbsp;&nbsp; when<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b : factB(s:f1, i:f2, f:f3)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a : factA(field1==s)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c : factC(f1==s)<br>&nbsp;&nbsp;&nbsp; then<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c.setF3(f);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; retract(b);
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; modify(c);<br>end<br><br>Stack trace:<br>java.lang.NullPointerException<br>&nbsp;&nbsp;&nbsp; at org.drools.base.com.vsasset.rules.isolate.factB$getF1.getValue(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.base.ClassFieldExtractor.getValue
(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.rule.Declaration.getValue(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.rule.BoundVariableConstraint.isAllowed(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.common.BetaNodeBinder.isAllowed(Unknown Source)
<br>&nbsp;&nbsp;&nbsp; at org.drools.reteoo.JoinNode.modifyObject(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.reteoo.ObjectSource.propagateModifyObject(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.reteoo.ObjectTypeNode.modifyObject(Unknown Source)<br>
&nbsp;&nbsp;&nbsp; at org.drools.reteoo.Rete.modifyObject(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.reteoo.ReteooRuleBase.modifyObject(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.reteoo.ReteooWorkingMemory.modifyObject(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.base.DefaultKnowledgeHelper.modifyObject
(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at com.vsasset.rules.isolate.Rule_factBWithRetract_0.consequence(Rule_factBWithRetract_0.java:10)<br>&nbsp;&nbsp;&nbsp; at com.vsasset.rules.isolate.Rule_factBWithRetract_0ConsequenceInvoker.evaluate(Rule_factBWithRetract_0ConsequenceInvoker.java:26)
<br>&nbsp;&nbsp;&nbsp; at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
<br>&nbsp;&nbsp;&nbsp; at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.common.AbstractRuleBase.addPackage(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at com.vsasset.rules.isolate.TestCase.main(TestCase.java:36)<br>
&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br>&nbsp;&nbsp;&nbsp; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java
:25)<br>&nbsp;&nbsp;&nbsp; at java.lang.reflect.Method.invoke(Method.java:585)<br>&nbsp;&nbsp;&nbsp; at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)<br>Exception in thread &quot;main&quot; org.drools.spi.ConsequenceException: java.lang.NullPointerException
<br>&nbsp;&nbsp;&nbsp; at org.drools.common.DefaultAgenda.fireActivation(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.common.DefaultAgenda.fireNextItem(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)
<br>&nbsp;&nbsp;&nbsp; at org.drools.common.AbstractWorkingMemory.fireAllRules(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at org.drools.common.AbstractRuleBase.addPackage(Unknown Source)<br>&nbsp;&nbsp;&nbsp; at com.vsasset.rules.isolate.TestCase.main(TestCase.java:36)<br>
&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br>&nbsp;&nbsp;&nbsp; at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br>&nbsp;&nbsp;&nbsp; at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java
:25)<br>&nbsp;&nbsp;&nbsp; at java.lang.reflect.Method.invoke(Method.java:585)<br>&nbsp;&nbsp;&nbsp; at com.intellij.rt.execution.application.AppMain.main(AppMain.java:90)<br><br>