user544192
user544192

Reputation: 715

Drools - Parser error while using a Map

I've written a simple Rule that prints the name of a Person when the Age is greater than 18.

Following works:

import java.util.Map;

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map()
 then
    if ($data.age > 18) {
        System.out.println($data.name);
    }
end

Following doesn't work. Why?

import java.util.Map;

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map()
    $data.age > 18
 then
    System.out.println($data.name);
end

Error Messsage:

[10,13]: [ERR 102] Line 10:13 mismatched input '>' in rule "PrintNameWhenAgeWhenGreaterThan18"
[0,0]: Parser returned a null Package
Exception in thread "main" java.lang.IllegalArgumentException: Could not parse knowledge.

Java code:

final Map<String, Object> data = new HashMap<>();
data.put("name", "Joe");
data.put("age", new Integer(30));
kSession.insert(data);
kSession.fireAllRules();

I know that I should rather be creating and using a Person class. This is just an example where I am trying to figure out how to use Maps with MVEL dialect in Drools.

Drools Version: 6.3.0 MVEL Version: 2.2.6

Thanks!!

Possible Solutions: Looks like I need to use the eval statement, while evaluating a boolean expression?

import java.util.Map;

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map()
    eval($data.age > 18)
 then
    System.out.println($data.name);
end

Suggested by Shyam

import java.util.Map;

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map(age > 18)
 then
    System.out.println($data.name);
end

Upvotes: 0

Views: 835

Answers (1)

shyam
shyam

Reputation: 9368

Did you try?

rule "PrintNameWhenAgeWhenGreaterThan18"
 dialect "mvel"
 when
    $data : Map( age > 18 )
 then
    System.out.println($data.name);
end

Upvotes: 1

Related Questions