Mario Fusco created JBRULES-3427:
------------------------------------
Summary: Wrong pattern's offsets calculation with complex LHS conditions
Key: JBRULES-3427
URL:
https://issues.jboss.org/browse/JBRULES-3427
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Reporter: Mario Fusco
Assignee: Mario Fusco
When combining AND and OR conditions in a complex LHS, the pattern's offsets is not
calculated correctly leading to a NPE when trying to extract the object related with the
wrong pattern from a tuple.
The following test reproduces the problem:
@Test
public void testPatternOffset() throws Exception {
String str = "package org.drools.test; \n" +
"declare A\n" +
"end\n" +
"declare B\n" +
" field : int\n" +
"end\n" +
"declare C\n" +
" field : int\n" +
"end\n" +
"rule R when\n" +
"( " +
" A( ) or ( A( ) and B( ) ) " +
") and (\n" +
" A( ) or ( B( $bField : field ) and C( field != $bField )
)\n" +
")\n" +
"then\n" +
" System.out.println(\"rule fired\");\n" +
"end\n";
KnowledgeBase kbase = loadKnowledgeBaseFromString( str );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
FactType typeA = kbase.getFactType( "org.drools.test", "A" );
FactType typeB = kbase.getFactType( "org.drools.test", "B" );
FactType typeC = kbase.getFactType( "org.drools.test", "C" );
Object a = typeA.newInstance();
ksession.insert( a );
Object b = typeB.newInstance();
typeB.set( b, "field", 1 );
ksession.insert( b );
Object c = typeC.newInstance();
typeC.set( c, "field", 1 );
ksession.insert( c );
ksession.fireAllRules();
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira