[jboss-jira] [JBoss JIRA] (DROOLS-387) NoSuchElementException on addKnowledgePackages when a "not" follows an "eval"
Jason Saint (JIRA)
issues at jboss.org
Sat Dec 28 18:50:31 EST 2013
Jason Saint created DROOLS-387:
----------------------------------
Summary: NoSuchElementException on addKnowledgePackages when a "not" follows an "eval"
Key: DROOLS-387
URL: https://issues.jboss.org/browse/DROOLS-387
Project: Drools
Issue Type: Bug
Security Level: Public (Everyone can see)
Affects Versions: 5.5.0.Final
Environment: java version "1.7.0_21"
Reporter: Jason Saint
Assignee: Mark Proctor
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 (tried with Drools 5.4 and 5.5)
{code}
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());
}
}
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list