<br>&nbsp;&nbsp; Henry,<br><br>&nbsp;&nbsp; If you look at the stack trace, the NPE happens inside your own class method:<br><br><font face="Courier New, Courier, monospace">at
org.activequant.core.domainmodel.TimeSeries.getInstrumentSpecification(Unknown
Source)<br><br></font>&nbsp;&nbsp; So, you need to look at what that method is doing to know why it is raising the NPE. <br>&nbsp; <br>&nbsp;&nbsp;&nbsp; []s<br>&nbsp;&nbsp;&nbsp; Edson<br><br><br><div><span class="gmail_quote">2008/1/15, Henry Canterburry &lt;<a href="mailto:canterburry@gmail.com">
canterburry@gmail.com</a>&gt;:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">



<div bgcolor="#ffffff" text="#000000">
I am using Drools 4.0.3. I have a rule that I believe should work but
causes a NullPointerException at runtime.<br>
<br>
The rule phrased this way causes a NullPointerException:<br>
<font face="Courier New, Courier, monospace">rule &quot;Create Order Limit&quot;<br>
&nbsp;&nbsp;&nbsp; when<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; CandleSeries( $instrument : instrumentSpecification )&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; then <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; insert(new OrderConstraint( $instrument ));&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
end</font><br>
<br>
While the same rule phased like this works fine:<br>
<br>
<font face="Courier New, Courier, monospace">rule &quot;Create Order Limit&quot;<br>
&nbsp;&nbsp;&nbsp; when<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; $candle : CandleSeries( )&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
&nbsp;&nbsp;&nbsp; then <br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; insert(new OrderConstraint(
$candle.getInstrumentSpecification() ));&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>
end</font><br>
<br>
Is this right? I was looking at rule example 10.27 in the Drools guide
and it&#39;s written exactly like rule #1 is.<br>
<br>
Here is the full stack trace of the rule execution from version 1:<br>
<br>
j<font face="Courier New, Courier, monospace">ava.lang.NullPointerException<br>
&nbsp;&nbsp;&nbsp; at
org.activequant.core.domainmodel.TimeSeries.getInstrumentSpecification(Unknown
Source)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.base.org.activequant.core.domainmodel.CandleSeries2216507$getInstrumentSpecification.getValue(Unknown
Source)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.base.ClassFieldExtractor.getValue(ClassFieldExtractor.java:127)<br>
&nbsp;&nbsp;&nbsp; at org.drools.rule.Declaration.getValue(Declaration.java:197)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.ruleflow.Rule_Create_Order_Limit_0ConsequenceInvoker.evaluate(Rule_Create_Order_Limit_0ConsequenceInvoker.java:17)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:462)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:424)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:50)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:24)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.rules.RandomMarketEntryRulesTest.testRandomMarketEntryRules(RandomMarketEntryRulesTest.java:55)<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:597)<br>
&nbsp;&nbsp;&nbsp; at junit.framework.TestCase.runTest(TestCase.java:168)<br>
&nbsp;&nbsp;&nbsp; at junit.framework.TestCase.runBare(TestCase.java:134)<br>
&nbsp;&nbsp;&nbsp; at junit.framework.TestResult$1.protect(TestResult.java:110)<br>
&nbsp;&nbsp;&nbsp; at junit.framework.TestResult.runProtected(TestResult.java:128)<br>
&nbsp;&nbsp;&nbsp; at junit.framework.TestResult.run(TestResult.java:113)<br>
&nbsp;&nbsp;&nbsp; at junit.framework.TestCase.run(TestCase.java:124)<br>
&nbsp;&nbsp;&nbsp; at junit.framework.TestSuite.runTest(TestSuite.java:232)<br>
&nbsp;&nbsp;&nbsp; at junit.framework.TestSuite.run(TestSuite.java:227)<br>
&nbsp;&nbsp;&nbsp; at junit.textui.TestRunner.doRun(TestRunner.java:116)<br>
&nbsp;&nbsp;&nbsp; at junit.textui.TestRunner.doRun(TestRunner.java:109)<br>
&nbsp;&nbsp;&nbsp; at junit.textui.TestRunner.run(TestRunner.java:77)<br>
&nbsp;&nbsp;&nbsp; at junit.textui.TestRunner.run(TestRunner.java:62)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.rules.RandomMarketEntryRulesTest.main(RandomMarketEntryRulesTest.java:63)<br>
E<br>
Time: 36.687<br>
There was 1 error:<br>
1)
testRandomMarketEntryRules(sequitem.quanteq.rules.RandomMarketEntryRulesTest)org.drools.spi.ConsequenceException:
java.lang.NullPointerException<br>
&nbsp;&nbsp;&nbsp; at
org.drools.base.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:14)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:553)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:514)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:462)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:424)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:50)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.rules.engine.StatefulEngine.execute(StatefulEngine.java:24)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.rules.RandomMarketEntryRulesTest.testRandomMarketEntryRules(RandomMarketEntryRulesTest.java:55)<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
sequitem.quanteq.rules.RandomMarketEntryRulesTest.main(RandomMarketEntryRulesTest.java:63)<br>
Caused by: java.lang.NullPointerException<br>
&nbsp;&nbsp;&nbsp; at
org.activequant.core.domainmodel.TimeSeries.getInstrumentSpecification(Unknown
Source)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.base.org.activequant.core.domainmodel.CandleSeries2216507$getInstrumentSpecification.getValue(Unknown
Source)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.base.ClassFieldExtractor.getValue(ClassFieldExtractor.java:127)<br>
&nbsp;&nbsp;&nbsp; at org.drools.rule.Declaration.getValue(Declaration.java:197)<br>
&nbsp;&nbsp;&nbsp; at
sequitem.quanteq.ruleflow.Rule_Create_Order_Limit_0ConsequenceInvoker.evaluate(Rule_Create_Order_Limit_0ConsequenceInvoker.java:17)<br>
&nbsp;&nbsp;&nbsp; at
org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:550)<br>
&nbsp;&nbsp;&nbsp; ... 23 more</font><br>
</div>

<br>_______________________________________________<br>rules-users mailing list<br><a onclick="return top.js.OpenExtLink(window,event,this)" href="mailto:rules-users@lists.jboss.org">rules-users@lists.jboss.org</a><br><a onclick="return top.js.OpenExtLink(window,event,this)" href="https://lists.jboss.org/mailman/listinfo/rules-users" target="_blank">
https://lists.jboss.org/mailman/listinfo/rules-users</a><br><br></blockquote></div><br><br clear="all"><br>-- <br>&nbsp;&nbsp;Edson Tirelli<br>&nbsp;&nbsp;JBoss Drools Core Development<br>&nbsp;&nbsp;Office: +55 11 3529-6000<br>&nbsp;&nbsp;Mobile: +55 11 9287-5646
<br>&nbsp;&nbsp;JBoss, a division of Red Hat @ <a href="http://www.jboss.com">www.jboss.com</a>