Drools 6.4.0规则继承 - 多个规则扩展了一个父级

时间:2016-08-12 20:07:11

标签: drools

我正在尝试打包多个drl文件,每个文件都有多个规则扩展相同的父规则BaseRule。

在调用

时获取 NullPointerException
kbuilder.add(ResourceFactory.newFileResource(file), ResourceType.DRL);

以下使用的逻辑在KnowledgeBuilderImpl - sortRulesByDependency()

中看起来不正确
    for (RuleDescr ruleDescr : packageDescr.getRules()) {
        if (ruleDescr.isQuery()) {
            queries.add(ruleDescr);
        } else if (!ruleDescr.hasParent()) {
            roots.add(ruleDescr);
        } else {
            if (pkg.getRule(ruleDescr.getParentName()) != null) {
                // The parent of this rule has been already compiled
                compiledRules.add(ruleDescr.getParentName());
            }
            List<RuleDescr> childz = children.get(ruleDescr.getParentName());
            if (childz == null) {
                childz = new ArrayList<RuleDescr>();
                children.put(ruleDescr.getParentName(), childz);
            }
            childz.add(ruleDescr);
        }
    }

    for (String compiledRule : compiledRules) {
        List<RuleDescr> childz = children.remove( compiledRule );
        roots.addAll( childz );
    }

compiledRules列表多次包含BaseRule个名称,因为多个规则会延伸BaseRule

第一次删除后,下次它将返回NULL,这将导致roots.addAll中的 NullPointerException

知道为什么没有检查以避免这种情况?

0 个答案:

没有答案