2015-09-29 2 views
0

У меня есть следующие два правила:Drools - ответ XML из нескольких правил выполнения

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 

Когда я получить доступ к Drools через REST, посылающую ниже запрос 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 = недействителен.

Прямо сейчас, я получаю результаты только из правила, выполненного последним. Пожалуйста, вы бы посоветовали, как я должен выполнить свою просьбу, чтобы получать результаты от всех запущенных правил в моем возвратном XML.

Благодаря

+1

Запрос не является проблемой, но очевидно, что глобальный ответ myResponse может содержать только данные исполнения одного правила. Как насчет использования 'List '? – laune

+0

Спасибо, laune. Это помогло. – efuller

ответ

1

Если количество правил ограничено двумя, и не будет масштабироваться в будущем вы можете иметь 2 глобальные объекты ответа, созданные для каждого правила, соответственно. Или вы можете передать объект List по ссылке на файл DRL.

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

конец

Смежные вопросы