Drools - 使用Map时出现分析器错误

时间:2015-11-30 05:45:40

标签: java drools mvel

我写了一个简单的规则,当年龄大于18时打印一个人的姓名。

以下作品:

import java.util.Map;

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

以下无效。为什么?

import java.util.Map;

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

错误消息:

[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代码:

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

我知道我宁愿创建和使用Person类。这只是一个例子,我试图弄清楚如何在Drools中使用带有MVEL方言的地图。

Drools版本:6.3.0 MVEL版本:2.2.6

谢谢!

可能的解决方案: 看起来我需要使用eval语句,同时评估一个布尔表达式?

import java.util.Map;

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

Shyam建议

import java.util.Map;

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

1 个答案:

答案 0 :(得分:1)

你试过吗?

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