]
David Ball commented on DROOLS-493:
-----------------------------------
I have the same behaviour in Drools 5.5.0-Final with Java 1.7.0_51
I have noted that the issue specifically occurs if a generic class variable is in scope
where the modify() block occurs.
For example, this rule does _not_ exhibit the problem because stringList is not in scope
where the modify() occurs:
{noformat}
rule "Test Rule - Works Due To Limited Scope"
when
o: Object( )
then
{
List<String> stringList = null;
}
modify(o) {/* dummy */}
end
{noformat}
whereas this rule _does_ hit the problem:
{noformat}
rule "Test Rule - Broken"
when
o: Object( )
then
List<String> stringList = null;
modify(o) {/* dummy */}
end
{noformat}
Error to declare Map/List with generics when having a modify() on
RHS
---------------------------------------------------------------------
Key: DROOLS-493
URL:
https://issues.jboss.org/browse/DROOLS-493
Project: Drools
Issue Type: Bug
Security Level: Public(Everyone can see)
Environment: * OS: Mac OS X 10.9.2
* Java SE 1.7
* Drools Runtime 6.1.0-Final
Reporter: Jinghai Rao
Assignee: Mark Proctor
For the following rule
-----------------------------
package com.sample
import java.util.Map;
import java.util.HashMap;
declare TestFact
@propertyReactive
data : String
end
rule "Test Rule"
when
$fact : TestFact()
then
Map<String,String> a = new HashMap<String,String>();
modify ($fact) {setData("0")}
end
------------------------
We get the following exception:
java.lang.RuntimeException: Error while creating KieBase[Message [id=1, level=ERROR,
path=rules/Sample.drl, line=11, column=0
text=Unable to resolve type Map<String,String>:
Unable to find class 'Map<String,String>']]
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.getKieBase(KieContainerImpl.java:260)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:400)
at
org.drools.compiler.kie.builder.impl.KieContainerImpl.newKieSession(KieContainerImpl.java:375)
at com.sample.DroolsTest.main(DroolsTest.java:17)
If we remove the generics, or not using modify(), this has no error.