Drools - 响应来自多个规则执行的XML

时间:2015-09-29 21:14:23

标签: rest drools

我有以下两条规则:

global Response myResponse;

rule "rule1"
    when
        Loan(processId == "1")
    then
        myResponse.setRuleId("rule1");
        myResponse.setPmtStatus("valid");
end

rule "rule2"
when
    Loan(amount > 1000)
then
    myResponse.setRuleId("rule2");
    myResponse.setPmtStatus("invalid");
end

当我通过REST访问Drools发送以下请求XML时,根据插入的数据,两个规则都应该触发。

<batch-execution lookup="testsession">
  <set-global identifier="myResponse" out-identifier="response">
      <com.sample.Response></com.sample.Response>
  </set-global>

  <insert out-identifier = "loan"> 
   <com.sample.Loan>
      <loanId>11112222</loanId>
      <processId>1</processId>
      <amount>2000.00</amount>
   </com.sample.Loan>
  </insert>
 <fire-all-rules/>
</batch-execution>

在我的响应XML中,我希望从这两个规则中收到结果信息。例如,我想获得一个带有ruleID = rule1和pmtStatus = valid的响应节点,以及另一个带有ruleId = rule2和pmtStatus = invalid的节点。

现在,我只从最后执行的规则中获得结果。请问您应该如何提出我的请求,以便从我的返回XML中接收所有被解雇的规则的结果。

谢谢

1 个答案:

答案 0 :(得分:1)

如果规则数量限制为2并且将来不会扩展,则可以分别为每个规则创建2个全局响应对象。 否则,您可以通过引用传递List对象到DRL文件。

rule "rule1"
when
    Loan(processId == "1")
    $list: ArrayList<Response>
    myResponse:Response()
then
    myResponse.setRuleId("rule1");
    myResponse.setPmtStatus("valid");
    $list.add(myResponse);