Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
drools将drl转换为pkg错误信息_Drools - Fatal编程技术网

drools将drl转换为pkg错误信息

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

我有一个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.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添加到构建路径中,然后错误消失了

我的困惑是:

  • a、 drl头不导入com/icil/service/exception/entity/ApplicationException,为什么需要将其添加到构建路径
  • 即使我错过了com/icil/service/exception/entity/ApplicationException的jar,为什么没有找到类而不是“无法分析表达式p.estActionDate2Loc…”的错误呢

  • 提前感谢。

    首先,如果
    com.util.*
    中的任何类引用了引用该异常的任何类,那么您需要导入它。但是,您在上面发布的错误不是类未找到异常。看起来您的DRL正在抛出该异常。如果这是compile.btw,我会很惊讶-我希望是
    estActionDate2Loc
    (或者可能是
    getEstActionDate2Loc()
    ?)方法引发了这个异常。@Steve,estActionDate2Loc只是类的一个属性,getEstActionDate2Loc()只是从映射返回值,因此,可能没有从他们那里抛出异常。我困惑的是:如何知道错误到底是什么。如果只是看到上面的错误“无法解决…”,很难想象我错过了构建路径中的“ApplicationException”。似乎还有其他代码要编译.drl,可以提供正确的错误信息,但我现在找不到代码。上面的错误没有说“无法解决”…;)MultiHolder.previousTO和MultiHolder.previousTO.estActionDate2Loc声明的详细信息可能有助于澄清这一点。我不会写
    p.estActionDate2Loc
    ,这会让人困惑。简单的方法是
    previousTO.estActionDate2Loc!=空
    。(顺便问一下:这有什么变化吗?)