[jboss-jira] [JBoss JIRA] (DROOLS-770) Query order can to lead to a NPE
Mario Fusco (JIRA)
issues at jboss.org
Tue Aug 11 13:32:03 EDT 2015
[ https://issues.jboss.org/browse/DROOLS-770?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Mario Fusco reassigned DROOLS-770:
----------------------------------
Assignee: Mario Fusco (was: Mark Proctor)
> Query order can to lead to a NPE
> --------------------------------
>
> Key: DROOLS-770
> URL: https://issues.jboss.org/browse/DROOLS-770
> Project: Drools
> Issue Type: Bug
> Reporter: Jonathan MERCIER
> Assignee: Mario Fusco
> Priority: Critical
>
> This bug is already reported to the drools team via email on 13th february.
> To follow efficiently any progress on this critical bug, I open a ticket.
> So, the reproducer code is:
> {code:java|title=NpeOnQueryTest|borderStyle=solid}
> package org.drools.compiler.integrationtests;
> import org.junit.Test;
> import org.kie.api.io.ResourceType;
> import org.kie.api.runtime.KieSession;
> import org.kie.internal.utils.KieHelper;
> import java.util.List;
> public class NpeOnQueryTest {
> @Test
> public void test() {
> String drl =
> "import " + FiveState.class.getCanonicalName() + ";\n" +
> "import " + NodeType.class.getCanonicalName() + ";\n" +
> "import " + Knowledge.class.getCanonicalName() + ";\n" +
> "import " + List.class.getCanonicalName() + ";\n" +
> "\n" +
> "rule \"Or Knowledge is unknown\"\n" +
> " when\n" +
> " $k: Knowledge( presence == FiveState.UNEVALUATED, nodeType == NodeType.OR )\n" +
> " allSubKnowledgeAreEvaluated( $k, $childs; )\n" +
> " not( Knowledge( presence == FiveState.TRUE ) )\n" +
> " then\n" +
> " modify( $k ){\n" +
> " setPresence( FiveState.UNKNOWN )\n" +
> " }\n" +
> "end\n" +
> "\n" +
> "rule \"Or Knowledge is present\"\n" +
> " when\n" +
> " $k: Knowledge( presence == FiveState.UNEVALUATED, nodeType == NodeType.OR )\n" +
> " allSubKnowledgeAreEvaluated( $k, $childs; )\n" +
> " then\n" +
> " modify( $k ){\n" +
> " setPresence( FiveState.TRUE )\n" +
> " }\n" +
> "end\n" +
> "\n" +
> "query allSubKnowledgeAreEvaluated( Knowledge parent, List childs )\n" +
> " childs:= List() from collect ( Knowledge( parent memberOf partOf ))\n" +
> " forall( Knowledge( presence != FiveState.UNEVALUATED ) from childs )\n" +
> "end\n";
> KieSession ksession = new KieHelper().addContent(drl, ResourceType.DRL)
> .build()
> .newKieSession();
> Knowledge bk0 = new Knowledge(new Knowledge[0], NodeType.OR, "bk0", FiveState.UNEVALUATED);
> Knowledge bk1 = new Knowledge(new Knowledge[] { bk0 }, NodeType.LEAF, "bk1", FiveState.TRUE);
> ksession.insert( bk0 );
> ksession.insert( bk1 );
> ksession.fireAllRules();
> }
> public enum FiveState {
> TRUE,
> FALSE,
> BOTH,
> UNKNOWN,
> UNEVALUATED
> }
> public enum NodeType {
> LEAF,
> AND,
> OR
> }
> public static class Knowledge {
> private final Knowledge[] partOf;
> private final NodeType nodeType;
> private final String name;
> private FiveState presence;
> public Knowledge(Knowledge[] partOf, NodeType nodeType, String name, FiveState presence) {
> this.partOf = partOf;
> this.nodeType = nodeType;
> this.name = name;
> this.presence = presence;
> }
> public void setPresence(final FiveState presence) {
> this.presence = presence;
> }
> public String getName() {
> return name;
> }
> public FiveState getPresence() {
> return presence;
> }
> public NodeType getNodeType() {
> return nodeType;
> }
> public Knowledge[] getPartOf() {
> return partOf;
> }
> }
> }
> {code}
>
> The interesting thing to be noticed is that if I move the query before the 2 rules in that DRL the problem disappears.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
More information about the jboss-jira
mailing list