Java 如何将loanApplication对象从规则返回到bpm流程?

Java 如何将loanApplication对象从规则返回到bpm流程?,java,drools,jbpm,Java,Drools,Jbpm,我正在使用drools(kie wb web界面),我有一个bpm流程,它接受一个loanApplication并返回该loanApplication和更新的数据(这是目标)。但当我尝试这样做时,我得到了回报 "Unable to create response: [LoanApplicationReviewer.LoanApplicationReview:21 - Age Knockout:1] -- [LoanApplicationReviewer.LoanApplicationReview

我正在使用drools(kie wb web界面),我有一个bpm流程,它接受一个loanApplication并返回该loanApplication和更新的数据(这是目标)。但当我尝试这样做时,我得到了回报

"Unable to create response: [LoanApplicationReviewer.LoanApplicationReview:21 - Age Knockout:1] -- [LoanApplicationReviewer.LoanApplicationReview:21 - Age Knockout:1] -- null"
我的数据模型:

public class LoanApplication implements java.io.Serializable {

    static final long serialVersionUID = 1L;

    private java.lang.Integer id;
    private java.lang.Integer age;
    private boolean accepted = true;
    private java.util.List<java.lang.String> knockoutReasons = new java.util.ArrayList<java.lang.String>();


    public LoanApplication() {
    }

    public java.lang.Integer getId() {
        return this.id;
    }

    public void setId(java.lang.Integer id) {
        this.id = id;
    }

    public java.lang.Integer getAge() {
        return this.age;
    }

    public void setAge(java.lang.Integer age) {
        this.age = age;
    }

    public boolean isAccepted() {
        return this.accepted;
    }

    public void setAccepted(boolean accepted) {
        this.accepted = accepted;
    }

    public java.util.List<java.lang.String> getKnockoutReasons() {
        return this.knockoutReasons;
    }

    public void setKnockoutReasons(
            java.util.List<java.lang.String> knockoutReasons) {
        this.knockoutReasons = knockoutReasons;
    }

    public void addKnockoutReason(String knockoutReason) {
        if (this.knockoutReasons == null) {
            this.knockoutReasons = new java.util.ArrayList<java.lang.String>();
        }
        this.knockoutReasons.add(knockoutReason);
    }



    public String toString() {
        return "loanApplicationResponse::[accepted=" + this.accepted 
        + ",knockoutReasons="
        + this.knockoutReasons.toString() + "]";
    }

    public LoanApplication(java.lang.Integer id, java.lang.Integer age,
                           boolean accepted, java.util.List 
                           knockoutReasons) {
        this.id = id;
        this.age = age;
        this.accepted = accepted;
        this.knockoutReasons = knockoutReasons;
    }
}

我还填写了我期望的数据作业。它似乎获得了数据,因为当我创建一个新实例并从表单运行它时,它拥有数据并执行规则,仅从rest界面使用swagger,我就得到了上面的错误。

在看了很久之后

似乎我不得不稍微修改我的请求,使之成为:

{
  "loanApplication" : {
    "com.xyz.abc.LoanApplication" : {
      "id" : 1,
      "age": 1,
      "accepted" : true
    }
  }
}
此外,我还必须将规则更改为:

rule 'age less than 30 do not accept'
  ruleflow-group 'ageKnockoutGroup'
  dialect "mvel"
  when
    loanApplication : LoanApplication(age < 30);
    //process : WorkflowProcessInstance();
    //loanApp : LoanApplication() from (LoanApplication)process.getVariable("loanApplication");
    //eval (loanApp.getAge() < 30);
  then
    loanApplication.setAccepted(false);
    loanApplication.addKnockoutReason("age under 30");
    System.out.println("in then less than 30 with loanApp:" + loanApplication.toString());
    String knockoutReasonFact = "age under 30";
    boolean acceptedFact = false;
    insert(knockoutReasonFact);
    insert(acceptedFact);
    update(loanApplication);
end
规则“30岁以下不接受”
规则流组“ageKnockoutGroup”
方言“mvel”
什么时候
贷款申请:贷款申请(年龄<30岁);
//流程:WorkflowProcessInstance();
//loanApp:LoanApplication()来自(LoanApplication)process.getVariable(“LoanApplication”);
//eval(loanApp.getAge()<30);
然后
loanApplication.setAccepted(false);
loanApplication.addKnockoutReason(“30岁以下”);
System.out.println(“使用loanApp:+loanApplication.toString())的输入小于30”;
String knockoutReasonFact=“30岁以下”;
布尔值acceptedFact=false;
插入(剔除事实);
插入(接受事实);
更新(loanApplication);
结束

使用所有相同的端点,我最终得到了预期的响应。我只是跟踪了BusinessCentral是如何调用我的drools/jbpm流程的,并反映了这一点

我不知道,但可能需要进一步测试。在规则运行后,您能在脚本中看到“loanApplication”应用程序进程变量吗?这里进行了一些认真的调查。你有什么关于github的东西可以让我看一个更完整的例子吗?还没有,但我应该可以在那里得到一些东西。如果可能的话,那太好了,我只玩了一点,遇到了一点麻烦,看起来你得到了一些很好的解决。
{
  "loanApplication" : {
    "com.xyz.abc.LoanApplication" : {
      "id" : 1,
      "age": 1,
      "accepted" : true
    }
  }
}
rule 'age less than 30 do not accept'
  ruleflow-group 'ageKnockoutGroup'
  dialect "mvel"
  when
    loanApplication : LoanApplication(age < 30);
    //process : WorkflowProcessInstance();
    //loanApp : LoanApplication() from (LoanApplication)process.getVariable("loanApplication");
    //eval (loanApp.getAge() < 30);
  then
    loanApplication.setAccepted(false);
    loanApplication.addKnockoutReason("age under 30");
    System.out.println("in then less than 30 with loanApp:" + loanApplication.toString());
    String knockoutReasonFact = "age under 30";
    boolean acceptedFact = false;
    insert(knockoutReasonFact);
    insert(acceptedFact);
    update(loanApplication);
end