drools将drl转换为pkg错误信息
我有一个a.drl文件,它可以工作。对于a.drl,其标题如下所示:drools将drl转换为pkg错误信息,drools,Drools,我有一个a.drl文件,它可以工作。对于a.drl,其标题如下所示: package com.test.drools; import java.util.List; import java.util.Map; import com.temp.ToDoItemTO; import com.util.*; 我将这些JAR添加到构建路径中 我想用以下代码将其转换为.pkg文件: KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.new
package com.test.drools;
import java.util.List;
import java.util.Map;
import com.temp.ToDoItemTO;
import com.util.*;
我将这些JAR添加到构建路径中
我想用以下代码将其转换为.pkg文件:
KnowledgeBuilder kBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kBuilder.add( ResourceFactory.newFileResource( drlFile ), ResourceType.DRL );
if( kBuilder.hasErrors() ){
for( KnowledgeBuilderError err: kBuilder.getErrors() ){
System.err.println( err.toString() );
}
throw new IllegalStateException( "DRL errors" );
}
OutputStream os;
try {
os = new FileOutputStream( pkgFile );
ObjectOutputStream oos = new ObjectOutputStream( os );
oos.writeObject( kBuilder.getKnowledgePackages() );
oos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
但它给了我很多错误,比如下一步:
[Line: 3768, Column: 2] : [Rule name='remove scheduled event_351']
Unable to Analyse Expression p.estActionDate2Loc != null:
[Error: com/icil/service/exception/entity/ApplicationException]
[Near : {... p.estActionDate2Loc != null ....}]
第3768行是:
when
holder : MultiHolder(p: previousTO, p.estActionDate2Loc != null)
then
.....
经过一次又一次的尝试,我将这个包含com/icil/service/exception/entity/ApplicationException的jar添加到构建路径中,然后错误消失了
我的困惑是:
提前感谢。首先,如果
com.util.*
中的任何类引用了引用该异常的任何类,那么您需要导入它。但是,您在上面发布的错误不是类未找到异常。看起来您的DRL正在抛出该异常。如果这是compile.btw,我会很惊讶-我希望是estActionDate2Loc
(或者可能是getEstActionDate2Loc()
?)方法引发了这个异常。@Steve,estActionDate2Loc只是类的一个属性,getEstActionDate2Loc()只是从映射返回值,因此,可能没有从他们那里抛出异常。我困惑的是:如何知道错误到底是什么。如果只是看到上面的错误“无法解决…”,很难想象我错过了构建路径中的“ApplicationException”。似乎还有其他代码要编译.drl,可以提供正确的错误信息,但我现在找不到代码。上面的错误没有说“无法解决”…;)MultiHolder.previousTO和MultiHolder.previousTO.estActionDate2Loc声明的详细信息可能有助于澄清这一点。我不会写p.estActionDate2Loc
,这会让人困惑。简单的方法是previousTO.estActionDate2Loc!=空
。(顺便问一下:这有什么变化吗?)