[rules-users] NullPointerException using 'enabled' function.

groovenarula gnarula1 at la-z-boy.com
Sun Jul 1 15:35:15 EDT 2012


I'm trying to use the enabled function to ensure that some rules only fire
under certain conditions. 

I have the following in my DRL :

rule "Load pricelist"
	salience 10000
	when
			$unitPrice : Pricelist() from PricelistUtilities.getPriceLists() 
	then
		insert ($unitPrice);
end

rule "Retract a priced unit"
	salience 5000
	when
		$priceUnit : PriceUnit( basePrice != null )
	then
		System.out.println("Retracting ..." + $priceUnit);
		retract ( $priceUnit );
end

rule "Price Unit by Prodid, Grade, Pattern, Color"
	enabled ( $detailPrice == true )
	salience 2500
	when
			$priceUnit : PriceUnit ( $detailPrice : detailPrice )
			$priceList : Pricelist( prodid == $priceUnit.prodid, coverGrade ==
$priceUnit.coverGrade, coverSeries == $priceUnit.coverSeries, coverColor ==
$priceUnit.coverColor )
	then
		modify ( $priceUnit )	{
			setBasePrice ( $priceList.getBasePrice() );
		}
end

rule "Price Unit by Prodid, Grade, Pattern"
	enabled ( $detailPrice == true )
	salience 2000
	when
			$priceUnit : PriceUnit ( $detailPrice : detailPrice )
			$priceList : Pricelist( prodid == $priceUnit.prodid, coverGrade ==
$priceUnit.coverGrade , coverSeries == $priceUnit.coverSeries  )
	then
		modify ( $priceUnit )	{
			setBasePrice ( $priceList.getBasePrice() );
		}
end

rule "Price Unit by Prodid, Grade, Pattern 0000"
	salience 1500
	when
			$priceUnit : PriceUnit ( )
			$priceList : Pricelist( prodid == $priceUnit.prodid, coverGrade ==
$priceUnit.coverGrade , coverSeries == "0000" )
	then
		System.out.println("Pricing unit : " + $priceUnit + " from  " + 
$priceList);
		$priceUnit.setBasePrice($priceList.getBasePrice());
		update ( $priceUnit );
end

Before adding the 'enabled' conditions to the rules, it all worked fine. But
after adding the 'enabled' function, I'm getting the following NullPointer
exception :

Exception executing consequence for rule "Price Unit by Prodid, Grade,
Pattern 0000" in com.sample: java.lang.NullPointerException
	at
org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
	at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1283)
	at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1209)
	at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1442)
	at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:710)
	at
org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:674)
	at
org.drools.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:230)
	at com.generic.rules.utils.DroolsTest.main(DroolsTest.java:37)
Caused by: java.lang.NullPointerException
	at org.drools.common.DefaultAgenda.createActivation(DefaultAgenda.java:569)
	at
org.drools.reteoo.RuleTerminalNode.modifyLeftTuple(RuleTerminalNode.java:297)
	at
org.drools.reteoo.SingleLeftTupleSinkAdapter.propagateModifyChildLeftTuple(SingleLeftTupleSinkAdapter.java:246)
	at org.drools.reteoo.JoinNode.modifyLeftTuple(JoinNode.java:363)
	at
org.drools.reteoo.LeftTupleSource.doModifyLeftTuple(LeftTupleSource.java:297)
	at
org.drools.reteoo.LeftTupleSource.modifyLeftTuple(LeftTupleSource.java:271)
	at org.drools.reteoo.JoinNode.modifyLeftTuple(JoinNode.java:429)
	at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.doPropagateModifyObject(CompositeLeftTupleSinkAdapter.java:260)
	at
org.drools.reteoo.CompositeLeftTupleSinkAdapter.propagateModifyObject(CompositeLeftTupleSinkAdapter.java:275)
	at
org.drools.reteoo.LeftInputAdapterNode.modifyObject(LeftInputAdapterNode.java:170)
	at
org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateModifyObject(CompositeObjectSinkAdapter.java:507)
	at
org.drools.reteoo.CompositeObjectSinkAdapter.propagateModifyObject(CompositeObjectSinkAdapter.java:432)
	at org.drools.reteoo.ObjectTypeNode.modifyObject(ObjectTypeNode.java:314)
	at org.drools.reteoo.EntryPointNode.modifyObject(EntryPointNode.java:265)
	at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:470)
	at org.drools.common.NamedEntryPoint.update(NamedEntryPoint.java:370)
	at
org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:317)
	at
org.drools.base.DefaultKnowledgeHelper.update(DefaultKnowledgeHelper.java:312)
	at
com.sample.Rule_Price_Unit_by_Prodid__Grade__Pattern_0000_8fe2d406670448989b7e4f1e051a27e9.defaultConsequence(Rule_Price_Unit_by_Prodid__Grade__Pattern_0000_8fe2d406670448989b7e4f1e051a27e9.java:9)
	at
com.sample.Rule_Price_Unit_by_Prodid__Grade__Pattern_0000_8fe2d406670448989b7e4f1e051a27e9DefaultConsequenceInvokerGenerated.evaluate(Unknown
Source)
	at
com.sample.Rule_Price_Unit_by_Prodid__Grade__Pattern_0000_8fe2d406670448989b7e4f1e051a27e9DefaultConsequenceInvoker.evaluate(Unknown
Source)
	at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1273)
	... 6 more

In the console I also see the results of my System.out.println :

Pricing unit : PriceUnit [prodid=001001, coverGrade= A, coverSeries=1234,
coverColor=05, basePrice=null] from  Pricelist [prodid=001001, cover=
A0000null, basePrice=599]

The only 'null' is $priceUnit.basePrice, which is what I'm trying to set.

I only get the exception when the 'detailedPrice' of PriceUnit is set to
false (i.e. when "Price Unit by Prodid, Grade, Pattern 0000" is attempting
to fire. If I set detailedPrice to true, the other rules fire just fine.

If I comment out the 'update ( $priceUnit );',  the consequence fires just
fine, but then other rules fire as well. When PriceUnit's pattern is set to
anything other than '1234', then too consequence of ""Price Unit by Prodid,
Grade, Pattern 0000"" rule fires just fine and I get the following output
(correctly so) :

Pricing unit : PriceUnit [prodid=001001, coverGrade= A, coverSeries=3456,
coverColor=05, basePrice=null] from  Pricelist [prodid=001001, cover=
A0000null, basePrice=599]
Retracting ...PriceUnit [prodid=001001, coverGrade= A, coverSeries=3456,
coverColor=05, basePrice=599]

What is causing the 'NullPointerException' ?  

I'm using Drools 5.4.0.

Please help.

G



--
View this message in context: http://drools.46999.n3.nabble.com/NullPointerException-using-enabled-function-tp4018382.html
Sent from the Drools: User forum mailing list archive at Nabble.com.


More information about the rules-users mailing list