2017-12-15 41 views
0

反復+集約メディエータの後にフローを続行することはできますか?終了集約後にメディエータを反復*する(continueParentなし) - WSO2

また、集計メディエータ内のすべての処理を実行し、continueParentプロパティを使用して処理を続行する必要がありますか?

私が達成しようとしているもののサンプルコード。私は繰り返しシーケンスの下で何も実行できないことに注意してください(そして、たとえcontinueParent = "true"を使用しても、ペローロードログは反復+集約ペイロードではなく、反復前に存在していたペイロードです) ...:

<iterate description="" expression="//n1:Entry" id="ENTRY_ITERATOR" 
xmlns:n1="http://ws.apache.org/ns/synapse"> 
<target> 
    <sequence> 
     <sequence key="myValidationSequence"/> 
     <log> 
      <property expression="$ctx:RESULT" name="Validation Result:"/> 
     </log> 
     <switch source="$ctx:RESULT"> 
      <case regex="S"> 
       <drop/> 
      </case> 
      <case regex="C"> 
       <payloadFactory media-type="xml"> 
        <format> 
         <Entry> 
          <product_code>$1</product_code> 
         </Entry> 
        </format> 
        <!-- this comes from the validationSequence --> 
        <args> 
         <arg evaluator="xml" expression="$ctx:product_code"/> 
        </args> 
       </payloadFactory> 
      </case> 
      <default> 
       <log> 
        <property name="Warning: " value="Could not identify validation code."/> 
       </log> 
      </default> 
     </switch> 
     <log level="full"/> 
     <property name="RESPONSE" value="true"/> 
     <sequence key="AggregationSequence"/></sequence> 
</target> 
</iterate> 
<log> 
    <property name="INFO" value="I can't get here. Why?"/> 
</log> 
<log level="full"/> 

ここで集計シーケンスです:

<?xml version="1.0" encoding="UTF-8"?> 
<sequence name="AggregationSequence" trace="disable" xmlns="http://ws.apache.org/ns/synapse"> 
    <aggregate id="ENTRY_ITERATOR"> 
     <completeCondition> 
      <messageCount max="-1" min="-1"/> 
     </completeCondition> 
     <onComplete> 
      <log> 
       <property name="LOG..." value="Aggregation completed"/> 
      </log> 
      <log level="full"/> 
     </onComplete> 
    </aggregate> 
</sequence> 

マイEIバージョンは6.1.1

答えて

1

では、集約されたとの反復+集約伝達物質の後に流れを継続することが可能ですメッセージが表示されるので、結果のメッセージを引き続き使用できますか? - はい、それはメディエーターとその可能性の両方を使用するという考えです。

次の方法で動作するはずです。

<iterate description="" expression="//n1:Entry" id="ENTRY_ITERATOR" 
xmlns:n1="http://ws.apache.org/ns/synapse"> 
<target> 
    <sequence> 
     <sequence key="myValidationSequence"/> 
     <log> 
      <property expression="$ctx:RESULT" name="Validation Result:"/> 
     </log> 
     <switch source="$ctx:RESULT"> 
      <case regex="S"> 
       <drop/> 
      </case> 
      <case regex="C"> 
       <payloadFactory media-type="xml"> 
        <format> 
         <Entry> 
          <product_code>$1</product_code> 
         </Entry> 
        </format> 
        <!-- this comes from the validationSequence --> 
        <args> 
         <arg evaluator="xml" expression="$ctx:product_code"/> 
        </args> 
       </payloadFactory> 
      </case> 
      <default> 
       <log> 
        <property name="Warning: " value="Could not identify validation code."/> 
       </log> 
      </default> 
     </switch> 
     <log level="full"/> 
     <property name="RESPONSE" value="true"/> 
</target> 
</iterate> 

    <aggregate id="ENTRY_ITERATOR"> 
     <completeCondition> 
      <messageCount max="-1" min="-1"/> 
     </completeCondition> 
     <onComplete> 
      <log> 
       <property name="LOG..." value="Aggregation completed"/> 
      </log> 
      <log level="full"/> 
     </onComplete> 
    </aggregate> 

作業プロセスの理解を深めるには、以下のIterate and Aggregateメディエータのドキュメントを参照してください。

https://docs.wso2.com/display/EI611/Iterate+Mediator https://docs.wso2.com/display/EI611/Aggregate+Mediator