2013-07-12 5 views
0

J'ai créé une procuration qui a demande que:Comment fusionner une réponse dans WSO2 ESB?

<body> 
<p:GetPersonDataOperation xmlns:p="http://tempuri.org"> 
    <!--1 or more occurrences--> 
    <xs:ID xmlns:xs="http://tempuri.org">1</xs:ID> 
    <xs:ID xmlns:xs="http://tempuri.org">2</xs:ID> 
</p:GetPersonDataOperation> 
</body> 

maintenant Dans le InSequence j'ai utilisé iterator comme:

<sequence xmlns="http://ws.apache.org/ns/synapse" name="GetPersonDataOperationSeq"> 
    <iterate xmlns:xs="http://tempuri.org" xmlns:ns="http://org.apache.synapse/xsd" xmlns:p="http://tempuri.org" preservePayload="true" attachPath="//p:GetPersonData" expression="//p:GetPersonData/xs:ID" id="IteratorForPersonData"> 
     <target> 
     <sequence> 
      <property name="ID" expression="//xs:ID" scope="default" type="String"/> 
      <filter xpath="count(//xs:ID)>0"> 
       <then> 
        <log level="custom"> 
        <property name="sequence" value="with id"/> 
        </log> 
        <payloadFactory> 
        <format> 
         <p:GetPersonDataOperation>$1</p:GetPersonDataOperation> 
        </format> 
        <args> 
         <arg expression="get-property('ID')"/> 
        </args> 
        </payloadFactory> 
        <send> 
        <endpoint key="GetPersonDataEP"/> 
        </send> 
       </then> 
       <else/> 
      </filter> 
     </sequence> 
     </target> 
    </iterate> 
</sequence> 

Quand je frappe ma procuration à la demande ci-dessus je suis en mesure d'obtenir sortie mais pas pour les deux ID mais pour ID = 2. Je veux obtenir à la fois la réponse, c'est-à-dire ID = 1 et ID = 2. Je sais que cela peut être fait en utilisant XSLT Mediator Mais je n'ai aucune connaissance de la transformation XSLT. Comment puis-je créer une réponse personnalisée en fusionnant les réponses pour ID = 1 et 2 en utilisant xslt mediator. Puis-je résoudre ce problème en utilisant Aggregate Mediator? Besoin d'aide dans ce mauvais.Merci à l'avance

+0

J'ai eu un tel problème. Je l'ai résolu si http://stackoverflow.com/questions/17443232/as-in-the-iterate-to-change-the-message-and-send-it-fully-wso2esb –

Répondre

0

Vous pouvez utiliser Aggregate mediator dans la séquence de sortie pour fusionner les réponses du médiateur itéréaire. Voir également Aggregator EIP.

Vous pouvez utiliser quelque chose comme ci-dessous dans la séquence.

<outSequence> 
     <aggregate> 
      <completeCondition> 
       <messageCount min="-1" max="-1" /> 
      </completeCondition> 
      <onComplete xmlns:p="http://tempuri.org" expression="//p:GetPersonDataResponse"> 
       <log level="full" /> 
       <send /> 
      </onComplete> 
     </aggregate> 
</outSequence> 

This blog post a un exemple similaire.

+0

Mais l'expression ci-dessus me donne à lire expression d'expiration – Roy