-
Bug
-
Resolution: Done
-
Major
-
None
-
5.5.0.Final
-
None
-
None
I apologize if this has already been reported, but I did not see anything in search results for which this looked like a duplicate.
With the following 2 rules, compiling the first and adding it to a knowledge base causes subsequent package additions to fail with a NoSuchElementException.
rule "Problem"
when
eval(true == true)
not String() from "Problem"
then
end
rule "Test1"
when
$test : String() from "Test"
then
end
The following java code will produce the exception on the second call to addKnowledgePackages (tried with Drools 5.4 and 5.5)
package com.chiprewards.droolsbug; import org.drools.KnowledgeBase; import org.drools.KnowledgeBaseFactory; import org.drools.builder.KnowledgeBuilder; import org.drools.builder.KnowledgeBuilderErrors; import org.drools.builder.KnowledgeBuilderFactory; import org.drools.io.Resource; import org.drools.builder.ResourceType; import org.drools.io.ResourceFactory; /** * Hello world! * */ public class App { public static void main( String[] args ) { KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(); KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); String problem_rule = "rule \"Problem\"\n when\n eval(true == true)\n not String() from \"Problem\"\n then\nend"; Resource resource = ResourceFactory.newByteArrayResource(problem_rule.getBytes()); kbuilder.add(resource, ResourceType.DRL); if(kbuilder.hasErrors()) { System.out.println("First rule had error parsing"); System.exit(1); } kBase.addKnowledgePackages(kbuilder.getKnowledgePackages()); //Add second rule String next_rule = "rule \"Test\"\n when\n String() from \"Test\"\n then\nend"; resource = ResourceFactory.newByteArrayResource(next_rule.getBytes()); kbuilder.add(resource, ResourceType.DRL); if(kbuilder.hasErrors()) { System.out.println("Second rule had error parsing"); System.exit(1); } kBase.addKnowledgePackages(kbuilder.getKnowledgePackages()); } }