[
https://issues.jboss.org/browse/DROOLS-387?page=com.atlassian.jira.plugin...
]
Davide Sottara closed DROOLS-387.
---------------------------------
Resolution: Done
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 on the second call to
addKnowledgePackages (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