Java 如何将loanApplication对象从规则返回到bpm流程?
我正在使用drools(kie wb web界面),我有一个bpm流程,它接受一个loanApplication并返回该loanApplication和更新的数据(这是目标)。但当我尝试这样做时,我得到了回报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
"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