[
https://issues.jboss.org/browse/DROOLS-809?page=com.atlassian.jira.plugin...
]
Mario Fusco resolved DROOLS-809.
--------------------------------
Resolution: Cannot Reproduce Bug
I'm not sure which commit fixed this issue (if any) but I couldn't reproduce that
NPE on master. The test case I used to try to reproduce this problem (borrowed from the
linked github project) follows:
{code}
@Test
public void testExtendRuleWithOr() {
// DROOLS-809
String drl =
"import " + Customer.class.getCanonicalName() + "\n"
+
"import " + Car.class.getCanonicalName() + "\n" +
"\n" +
"rule \"base\"\n" +
"when\n" +
" (\n" +
" (\n" +
" $car := Car( $customer := customer )\n" +
" and\n" +
" exists Customer( this == $customer, age > 50
)\n" +
" )\n" +
" or\n" +
" (\n" +
" $car := Car( $customer := customer )\n" +
" and\n" +
" exists Customer( this == $customer, age > 30
)\n" +
" )\n" +
" )\n" +
"then\n" +
" System.out.println(\"rule\");\n" +
" System.out.println($customer);\n" +
" System.out.println($car);\n" +
"end\n" +
"\n" +
"rule \"extended\" extends \"base\"\n" +
"when\n" +
" $car := Car( customer == $customer )\n" +
"then\n" +
" System.out.println(\"Extended rule\");\n" +
" System.out.println($car);\n" +
"end\n";
KieSession ksession = new KieHelper().addContent( drl, ResourceType.DRL )
.build()
.newKieSession();
Customer c1 = new Customer( 85 );
Car car1 = new Car(c1);
ksession.insert(c1);
ksession.insert(car1);
ksession.fireAllRules();
}
public static class Car {
public Customer customer;
public Car(){ }
public Car(Customer customer) {
this.customer = customer;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
}
public static class Customer {
int age;
double discount;
boolean hasCar;
public Customer() {
}
public Customer(int age ) {
this.age = age;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getDiscount() {
return discount;
}
public void setDiscount(double discount) {
this.discount = discount;
}
public boolean getHasCar() {
return hasCar;
}
public void setHasCar(boolean hasCar) {
this.hasCar = hasCar;
}
}
{code}
NPE when using extend rules with or node and exists
---------------------------------------------------
Key: DROOLS-809
URL:
https://issues.jboss.org/browse/DROOLS-809
Project: Drools
Issue Type: Bug
Reporter: Jonathan MERCIER
Assignee: Mario Fusco
Dear
In some case extended rule failed to find variable.
{panel:title=NPE|borderStyle=dashed|borderColor=#ccc|titleBGColor=#F7D6C1|bgColor=#FFFFCE}
Exception in thread "main" Exception executing consequence for rule
"extended" in fr.cea.test: java.lang.NullPointerException
at
org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1125)
at org.drools.core.phreak.RuleExecutor.fire(RuleExecutor.java:160)
at org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire(RuleExecutor.java:108)
at org.drools.core.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1016)
at org.drools.core.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1302)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1289)
at
org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules(StatefulKnowledgeSessionImpl.java:1262)
at fr.cea.test.App.main(App.java:57)
Caused by: java.lang.NullPointerException
at
fr.cea.test.Rule_extended1921345119DefaultConsequenceInvokerGenerated.evaluate(Unknown
Source)
at fr.cea.test.Rule_extended1921345119DefaultConsequenceInvoker.evaluate(Unknown
Source)
at org.drools.core.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1114)
... 7 more
{panel}
This occur when using "or", "exists" and "extends"
A minimal test case is available on
[
github|https://github.com/bioinfornatics/DROOLS_NPE_rule_extended]
In this [test case
|https://github.com/bioinfornatics/DROOLS_NPE_rule_extended/blob/master/src/main/resources/fr.cea.test/rules.drl]:
if we comment line number 35 , any error are raised
if we uncomment line number 10 , any error are raised
if we remove all "exists" words, any error are raised
If the same rule is write using named consequence the test pass.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)