2013-05-31 3 views
0

J'ai ma demande d'entrée comme:Utilisation du médiateur Itérer dans WSO2 ESB

<body> 
<p:UpdateID xmlns:p="http://tempuri.org"> 
    <!--Exactly 1 occurrence--> 
    <xs:newid xmlns:xs="http://tempuri.org">NewID</xs:newid> 
    <!--1 or more occurrences--> 
    <xs:oldid xmlns:xs="http://tempuri.org">OldID_001</xs:oldid> 
    <xs:oldid xmlns:xs="http://tempuri.org">OldID_002</xs:oldid> 
</p:UpdateID> 
</body> 

J'ai écrit un service proxy que je ne fonctionne pas comme:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="UpdateID" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
     <iterate xmlns:xs="http://tempuri.org" id="Iterate1" expression="count(//xs:oldid)"> 
      <target> 
       <sequence> 
        <property name="newid" expression="//xs:newid" scope="default" type="STRING"/> 
        <property name="oldid" expression="//xs:oldid" scope="default" type="STRING"/> 
        <payloadFactory> 
        <format> 
         <p:UpdateID xmlns:p="http://tempuri.org"> 
          <xs:newid>$1</xs:newid> 
          <xs:oldid>$2</xs:oldid> 
         </p:UpdateID> 
        </format> 
        <args> 
         <arg expression="get-property('newid')"/> 
         <arg expression="get-property('oldid')"/> 
        </args> 
        </payloadFactory> 
        <send> 
        <endpoint key="UpdateEP"/> 
        </send> 
       </sequence> 
      </target> 
     </iterate> 
     </inSequence> 
    </target> 
    <publishWSDL uri="http://xyz:9764/services/Update_DataService?wsdl"/> 
    <description></description> 
</proxy> 

Maintenant, ma question est comment peut je reçois le compte de oldid de sorte que je peux itérer de 0 à compter de oldid, Quelque chose comme pour la boucle. Et deuxième comment puis-je attribuer une valeur oldid à la charge utile un par un. S'il vous plaît, aidez. Merci à l'avance

Répondre

4

Vous pouvez modifier l'expression itérer à l'expression = « // xs: oldid » qui itérer au nombre d'éléments disponibles oldid. Ensuite, vous pouvez prendre l'affectation de la nouvelle valeur, hors de l'itérateur, puisqu'il n'y aura qu'un seul élément newid. J'ai mis à jour votre configuration de proxy avec ces changements.

<proxy xmlns="http://ws.apache.org/ns/synapse" name="UpdateID" transports="https,http" statistics="disable" trace="disable" startOnLoad="true"> 
    <target> 
     <inSequence> 
    <property name="newid" expression="//xs:newid" scope="default" type="STRING" xmlns:xs="http://tempuri.org"/> 
     <iterate xmlns:xs="http://tempuri.org" id="Iterate1" expression="//xs:oldid"> 
      <target> 
       <sequence> 
        <property name="oldid" expression="//xs:oldid" scope="default" type="STRING"/> 
        <payloadFactory> 
        <format> 
         <p:UpdateID xmlns:p="http://tempuri.org"> 
          <xs:newid>$1</xs:newid> 
          <xs:oldid>$2</xs:oldid> 
         </p:UpdateID> 
        </format> 
        <args> 
         <arg expression="get-property('newid')"/> 
         <arg expression="get-property('oldid')"/> 
        </args> 
        </payloadFactory> 
        <send> 
        <endpoint key="UpdateEP"/> 
        </send> 
       </sequence> 
      </target> 
     </iterate> 
     </inSequence> 
    </target> 
    <publishWSDL uri="http://xyz:9764/services/Update_DataService?wsdl"/> 
    <description></description> 
</proxy> 
2

Pour ce scénario, pensez à utiliser le Script mediator à la place. Il vous permet d'écrire un script en JavaScript ou en Python pour effectuer les opérations souhaitées.