[rules-users] Strange property access behavior resulting in NullPointerException

Edson Tirelli tirelli at post.com
Tue Jan 15 06:18:52 EST 2008


   Henry,

   If you look at the stack trace, the NPE happens inside your own class
method:

at org.activequant.core.domainmodel.TimeSeries.getInstrumentSpecification(Unknown
Source)

   So, you need to look at what that method is doing to know why it is
raising the NPE.

    []s
    Edson


2008/1/15, Henry Canterburry <canterburry at gmail.com>:
>
>  I am using Drools 4.0.3. I have a rule that I believe should work but
> causes a NullPointerException at runtime.
>
> The rule phrased this way causes a NullPointerException:
> rule "Create Order Limit"
>     when
>         CandleSeries( $instrument : instrumentSpecification )
>     then
>         insert(new OrderConstraint( $instrument ));
> end
>
> While the same rule phased like this works fine:
>
> rule "Create Order Limit"
>     when
>         $candle : CandleSeries( )
>     then
>         insert(new OrderConstraint( $candle.getInstrumentSpecification()
> ));
> end
>
> Is this right? I was looking at rule example 10.27 in the Drools guide and
> it's written exactly like rule #1 is.
>
> Here is the full stack trace of the rule execution from version 1:
>
> java.lang.NullPointerException
>     at
> org.activequant.core.domainmodel.TimeSeries.getInstrumentSpecification(Unknown
> Source)
>     at
> org.drools.base.org.activequant.core.domainmodel.CandleSeries2216507$getInstrumentSpecification.getValue(Unknown
> Source)
>     at org.drools.base.ClassFieldExtractor.getValue(
> ClassFieldExtractor.java:127)
>     at org.drools.rule.Declaration.getValue(Declaration.java:197)
>     at
> sequitem.quanteq.ruleflow.Rule_Create_Order_Limit_0ConsequenceInvoker.evaluate
> (Rule_Create_Order_Limit_0ConsequenceInvoker.java:17)
>     at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java
> :550)
>     at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java
> :514)
>     at org.drools.common.AbstractWorkingMemory.fireAllRules(
> AbstractWorkingMemory.java:462)
>     at org.drools.common.AbstractWorkingMemory.fireAllRules(
> AbstractWorkingMemory.java:424)
>     at sequitem.quanteq.rules.engine.StatefulEngine.execute(
> StatefulEngine.java:50)
>     at sequitem.quanteq.rules.engine.StatefulEngine.execute(
> StatefulEngine.java:24)
>     at
> sequitem.quanteq.rules.RandomMarketEntryRulesTest.testRandomMarketEntryRules
> (RandomMarketEntryRulesTest.java:55)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:39)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:25)
>     at java.lang.reflect.Method.invoke(Method.java:597)
>     at junit.framework.TestCase.runTest(TestCase.java:168)
>     at junit.framework.TestCase.runBare(TestCase.java:134)
>     at junit.framework.TestResult$1.protect(TestResult.java:110)
>     at junit.framework.TestResult.runProtected(TestResult.java:128)
>     at junit.framework.TestResult.run(TestResult.java:113)
>     at junit.framework.TestCase.run(TestCase.java:124)
>     at junit.framework.TestSuite.runTest(TestSuite.java:232)
>     at junit.framework.TestSuite.run(TestSuite.java:227)
>     at junit.textui.TestRunner.doRun(TestRunner.java:116)
>     at junit.textui.TestRunner.doRun(TestRunner.java:109)
>     at junit.textui.TestRunner.run(TestRunner.java:77)
>     at junit.textui.TestRunner.run(TestRunner.java:62)
>     at sequitem.quanteq.rules.RandomMarketEntryRulesTest.main(
> RandomMarketEntryRulesTest.java:63)
> E
> Time: 36.687
> There was 1 error:
> 1) testRandomMarketEntryRules(
> sequitem.quanteq.rules.RandomMarketEntryRulesTest)org.drools.spi.ConsequenceException:
> java.lang.NullPointerException
>     at org.drools.base.DefaultConsequenceExceptionHandler.handleException(
> DefaultConsequenceExceptionHandler.java:14)
>     at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java
> :553)
>     at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java
> :514)
>     at org.drools.common.AbstractWorkingMemory.fireAllRules(
> AbstractWorkingMemory.java:462)
>     at org.drools.common.AbstractWorkingMemory.fireAllRules(
> AbstractWorkingMemory.java:424)
>     at sequitem.quanteq.rules.engine.StatefulEngine.execute(
> StatefulEngine.java:50)
>     at sequitem.quanteq.rules.engine.StatefulEngine.execute(
> StatefulEngine.java:24)
>     at
> sequitem.quanteq.rules.RandomMarketEntryRulesTest.testRandomMarketEntryRules
> (RandomMarketEntryRulesTest.java:55)
>     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>     at sun.reflect.NativeMethodAccessorImpl.invoke(
> NativeMethodAccessorImpl.java:39)
>     at sun.reflect.DelegatingMethodAccessorImpl.invoke(
> DelegatingMethodAccessorImpl.java:25)
>     at sequitem.quanteq.rules.RandomMarketEntryRulesTest.main(
> RandomMarketEntryRulesTest.java:63)
> Caused by: java.lang.NullPointerException
>     at
> org.activequant.core.domainmodel.TimeSeries.getInstrumentSpecification(Unknown
> Source)
>     at
> org.drools.base.org.activequant.core.domainmodel.CandleSeries2216507$getInstrumentSpecification.getValue(Unknown
> Source)
>     at org.drools.base.ClassFieldExtractor.getValue(
> ClassFieldExtractor.java:127)
>     at org.drools.rule.Declaration.getValue(Declaration.java:197)
>     at
> sequitem.quanteq.ruleflow.Rule_Create_Order_Limit_0ConsequenceInvoker.evaluate
> (Rule_Create_Order_Limit_0ConsequenceInvoker.java:17)
>     at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java
> :550)
>     ... 23 more
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>


-- 
  Edson Tirelli
  JBoss Drools Core Development
  Office: +55 11 3529-6000
  Mobile: +55 11 9287-5646
  JBoss, a division of Red Hat @ www.jboss.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20080115/e6ab1480/attachment.html 


More information about the rules-users mailing list