我正在尝试打包多个drl文件,每个文件都有多个规则扩展相同的父规则BaseRule。
在调用
时获取 NullPointerExceptionkbuilder.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
知道为什么没有检查以避免这种情况?