2017-05-22 3 views
0

J'ai un service Web SOAP qui peut être consulté comme:cumulables réponses SOAP ainsi que des requêtes SOAP par la médiation de wso2esb

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
    xmlns:sys="system"> 
    <soap:Body> 
    <sys:getAccountInfo> 
     <account id="132456"/> 
    </sys:getAccountInfo> 
    </soap:Body> 
</soap:Envelope> 

Ce service Web fournirait la réponse suivante:

<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope"> 
    <S:Body> 
    <ns1:getAccountInfoResponse xmlns:ns1="system"> 
     <balance value="555"> 
    </ns1:getAccountInfoResponse> 
    </S:Body> 
</S:Envelope> 

Mon défi est de fournir un service de proxyfying qui peut accepter plusieurs comptes en entrée et répondre à l'équilibre pour chacun comme ce qui suit: demande en proxy:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
    xmlns:sys="systemProxy" xmlns:inner="innerProxyNamespace"> 
    <soap:Body> 
    <sys:getAccountInfo> 
     <inner:account id="123456"/> 
     <inner:account id="123457"/> 
     <inner:account id="123458"/> 
    </sys:getAccountInfo> 
    </soap:Body> 
</soap:Envelope> 

Proxy réponse:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" 
    xmlns:sys="systemProxy" xmlns:inner="innerProxyNamespace"> 
    <soap:Body> 
    <sys:getAccountInfoResponse> 

     <inner:account id="123456"> 
     <inner:balance value="555"/> 
     </inner:account> 

     <inner:account id="123457"> 
     <inner:balance value="666"/> 
     </inner:account> 

     <inner:account id="123458"> 
     <inner:balance value="777"/> 
     </inner:account> 

    </sys:getAccountInfoResponse> 
    </soap:Body> 
<soap:Envelope> 

J'utilise Itérer et Aggregate médiateur pour la division requête entrante en plusieurs demandes de back-end et en accumulant des réponses de back-end dans un seul message. Le problème est que je ne peux pas trouver la bonne façon d'inclure account id en réponse par procuration même avec Enrich médiateur.

je fais itération séquence comme ceci:

<!-- it is correct proxy incoming message format --> 
<iterate attachPath="soap:Body/sys:getAccountInfo" 
    expression="$body/sys:getAccountInfo/account" 
    preservePayload="true" 
    xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:sys="systemProxy"> 
    <target> 
    <sequence> 
     <payloadFactory> 
     <!-- payloadFactory configuration skipped --> 
     </payloadFactory> 
     <enrich> 
     <source clone="true" type="body"/> 
     <target property="originalRequest" type="property"/> 
     </enrich> 
     <send> 
     <endpoint key="BackendEndpoint"/> 
     </send> 
    </sequence> 
    </target> 
</iterate> 

La question est - quelle est la bonne façon de regrouper tous les messages de réponse de back-end dans une conservation des données de la demande initiale?

Répondre

0

J'utilisé Propetry et PayloadFactory médiateurs avant l'globale médiateur. Cela m'a permis d'inclure la requête dans la réponse avant l'agrégation. Ensuite, je les ai regroupés tous ensemble.