Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.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
InstanceCof在drools规则引擎drl文件中不工作_Drools_Rule Engine_Business Rules - Fatal编程技术网

InstanceCof在drools规则引擎drl文件中不工作

InstanceCof在drools规则引擎drl文件中不工作,drools,rule-engine,business-rules,Drools,Rule Engine,Business Rules,我正在传递一个listlist list=new ArrayList()到drools,内部arraylist包含类的对象,我的规则如下 rule "test1" when $l:TaxList($k : list) $b:ArrayList() from $k $a:Object() from $b then if($a instanceof TaxPayer){ $b.add(new TaxPayer(7,6,5,4,3,2,1));

我正在传递一个list
list list=new ArrayList()到drools,内部arraylist包含类的对象,我的规则如下

rule "test1"
when
    $l:TaxList($k : list)
    $b:ArrayList() from $k
    $a:Object() from $b
then
    if($a instanceof TaxPayer){
        $b.add(new TaxPayer(7,6,5,4,3,2,1));
    }
    if($a instanceof Object){
        $b.add(new TaxPayer(1,2,3,4,5,6,7));
    }

end

第二个if运行良好,但第一个if不运行,即使它是纳税人的实例

我尝试执行上述规则,如下所示:

rule "test"
when
    $c : TaxList($list : list)
    $b : ArrayList()  from $list
    $testobj: Object() from $b
then
    if ($testobj instanceof TaxPayer){
        System.out.println("inside if 1");
    }
    if ($testobj instanceof Object) {
        System.out.println("inside if 2 ");
    }
end
这对我来说很好。我得到的结果是:

inside if 1
inside if 2 
inside if 1
inside if 2 ...
您能否详细说明您的问题,并在问题中添加相应的java代码,以便我能够理解您是如何将对象插入drools会话的。请添加Java代码片段和TaxList类

编辑:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieContainer = kieServices.newKieClasspathContainer();
        KieSession kieSession = kieContainer.newKieSession("test");
        ArrayList<TaxPayer> taxPayers = new ArrayList<>();
        taxPayers.add(new TaxPayer(1));
        taxPayers.add(new TaxPayer(2));
        ArrayList<ArrayList> arrayLists = new ArrayList<>();
        arrayLists.add(taxPayers);
        TaxList taxList = new TaxList(arrayLists);
        kieSession.insert(taxList);
        kieSession.fireAllRules();
    }
}
import java.util.ArrayList;

public class TaxList {
    ArrayList<ArrayList> list = new ArrayList<>();


    public TaxList(ArrayList<ArrayList> list) {
        this.list = list;
    }

    public ArrayList<ArrayList> getList() {
        return list;
    }

    public void setList(ArrayList<ArrayList> list) {
        this.list = list;
    }
}
public class TaxPayer {
    private int id;

    public TaxPayer(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}
Main.java:

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        KieServices kieServices = KieServices.Factory.get();
        KieContainer kieContainer = kieServices.newKieClasspathContainer();
        KieSession kieSession = kieContainer.newKieSession("test");
        ArrayList<TaxPayer> taxPayers = new ArrayList<>();
        taxPayers.add(new TaxPayer(1));
        taxPayers.add(new TaxPayer(2));
        ArrayList<ArrayList> arrayLists = new ArrayList<>();
        arrayLists.add(taxPayers);
        TaxList taxList = new TaxList(arrayLists);
        kieSession.insert(taxList);
        kieSession.fireAllRules();
    }
}
import java.util.ArrayList;

public class TaxList {
    ArrayList<ArrayList> list = new ArrayList<>();


    public TaxList(ArrayList<ArrayList> list) {
        this.list = list;
    }

    public ArrayList<ArrayList> getList() {
        return list;
    }

    public void setList(ArrayList<ArrayList> list) {
        this.list = list;
    }
}
public class TaxPayer {
    private int id;

    public TaxPayer(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

所以我发现了问题,jackon没有足够的关于arraylist的信息来序列化它,所以它使用Deafolt的LinkedhashMap作为它的类。你可以从你的代码中看到,我发现你正在将纳税人对象插入drools工作内存,而在规则中,你期望一个TaxList作为事件。尝试在工作内存中插入TaskList。我通过了TaxList,但它仍然不起作用,你能告诉我你是如何编写客户端代码的吗