【问题标题】:Rule Compilation error : Can only iterate over an array or an instance of java.lang.Iterable规则编译错误:只能遍历数组或 java.lang.Iterable 的实例
【发布时间】:2014-09-01 07:27:21
【问题描述】:

我是 mongoDb 和流口水的新手。 我正在用drools 编写一个规则,它正在迭代一个java 列表。但是在运行tomcat时,它给出了规则编译错误。

从 dao 获取列表:-

List<XYZ> list = new ArrayList<XYZ>();
Query q = query(where("id").is(userId));
list = getMongoOperation().find(q, XYZ.class, "XYZ"); 

在drools引擎中使用列表规则:-

for(XYZ xyzObj : list) 
{           
}

模型类:-

@Document(collection="XYZ")
public class XYZ 
{
}

运行 tomcat 时出现异常。 “规则编译错误:只能遍历数组或 java.lang.Iterable 的实例”

规则文件:-

导入 java.util.List;导入 java.util.Iterator;全球 com.demo.XYZ 列表

规则'1_Demo_Rule'

当 prop : RULEDEMO(attribute == "demo") then

  for(XYZ xyzObj : list)          {                   }

结束

【问题讨论】:

  • 绝对没有经验,但collection="XYZ" 听起来不对。
  • ... 这不是 Drools 规则。或者至少它不是规则的相关部分。你还没有显示list 是什么。
  • @Steve 我添加了规则文件。请查看更新后的问题
  • 嗯,根据该规则,列表是 XYZ 的一个实例,这可以解释为什么您无法对其进行迭代。
  • 全局列表列表对吧?

标签: java mongodb drools


【解决方案1】:

由于 DRL 解析器的限制,您根本无法使用 for 语句的短语法。

鉴于

global List<com.demo.XYZ> list;

使用不那么好的

for( int i = 0; i < list.size(); i++ ){
    XYZ xyzObj = list.get(i);
    // ...
}

【讨论】:

    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多