2016-09-04 1 views
0

je suis confronté à des problèmes avec ce processus .. laissez-moi vous expliquer:WSO2 médiateur ESB itérer se joindre à

je veux appeler deux services et rejoindre les réponses dans cet ordre:

j'ai le premier service de réponse:

<locations xmlns="http://ssocial.com/traceit/services/location"> 
     <location> 
      <latitude>-33.45209980</latitude> 
      <longitude>-70.66241990</longitude> 
      <altitude>0.0</altitude> 
      <creation>2016-09-04T14:59:48.000-03:00</creation> 
      <updated>2016-09-04T14:59:48.000-03:00</updated> 
      <deviceId>25</deviceId> 
     </location> 
     <location> 
      <latitude>-33.45149521</latitude> 
      <longitude>-70.66146224</longitude> 
      <altitude>817.0</altitude> 
      <creation>2016-09-04T13:18:43.000-03:00</creation> 
      <updated>2016-09-04T13:18:43.000-03:00</updated> 
      <deviceId>25</deviceId> 
     </location> 
    </locations> 

alors j'ai la réponse du service seconde:

<device xmlns="http://ssocial.com/traceit/services/device"> 
<id>25</id> 
<code>mobile_02</code> 
<type> 
    <id>1</id> 
    <name>MOBILE</name> 
</type> 


Et puis, la réponse finale que je voudrais avoir est:

<locations xmlns="http://ssocial.com/traceit/services/location"> 
     <location> 
      <latitude>-33.45209980</latitude> 
      <longitude>-70.66241990</longitude> 
      <altitude>0.0</altitude> 
      <creation>2016-09-04T14:59:48.000-03:00</creation> 
      <updated>2016-09-04T14:59:48.000-03:00</updated> 
      <deviceId>25</deviceId> 
      <device xmlns="http://ssocial.com/traceit/services/device"> 
       <id>25</id> 
       <code>mobile_02</code> 
       <type> 
        <id>1</id> 
        <name>MOBILE</name> 
       </type> 
      </device> 
     </location> 
     <location> 
      <latitude>-33.45149521</latitude> 
      <longitude>-70.66146224</longitude> 
      <altitude>817.0</altitude> 
      <creation>2016-09-04T13:18:43.000-03:00</creation> 
      <updated>2016-09-04T13:18:43.000-03:00</updated> 
      <deviceId>25</deviceId> 
      <device xmlns="http://ssocial.com/traceit/services/device"> 
       <id>25</id> 
       <code>mobile_02</code> 
       <type> 
        <id>1</id> 
        <name>MOBILE</name> 
       </type> 
      </device> 
     </location> 
    </locations> 

Je suis vraiment avoir beaucoup de problèmes en essayant de joindre les deux réponses comme ça, et c'est ma séquence WSO2:

<sequence name="getDeviceInfoByLocationProcess" trace="disable" xmlns="http://ws.apache.org/ns/synapse"> 
<property expression="count(//ns1:locations/ns1:location)" name="LOCATIONS_COUNT" scope="default" type="STRING" xmlns:ns1="http://ssocial.com/traceit/services/location"/> 
<iterate description="" expression="//ns1:locations/ns1:location/ns1:deviceId" id="LOCATIONS_ITERATOR" xmlns:ns1="http://ssocial.com/traceit/services/location"> 
    <target> 
     <sequence> 
      <property description="device_id" expression="//ns1:deviceId" name="device_id" scope="default" type="STRING"/> 
      <sequence key="getDeviceInfoProcess"/> 
     </sequence> 
    </target> 
</iterate> 
<log level="custom"> 
    <property expression="//ns1:locations" name="LOCATIONS" xmlns:ns1="http://ssocial.com/traceit/services/location"/> 
    <property expression="//ns2:device" name="DEVICE_INFO" xmlns:ns2="http://ssocial.com/traceit/services/device"/> 
</log> 
<property name="ECNCLOSING_ELEMENT" scope="default"> 
    <wrapper xmlns=""/> 
</property> 
<aggregate id="AGG_01"> 
    <completeCondition> 
     <messageCount max="-1" min="{get-property('LOCATIONS_COUNT')}"/> 
    </completeCondition> 
    <onComplete expression="//ns2:device" xmlns:ns2="http://ssocial.com/traceit/services/device"> 
     <log level="full"> 
      <property expression="$ctx:LOCATIONS_COUNT" name="COUNTER"/> 
      <property expression="$ctx:ECNCLOSING_ELEMENT" name="ENCLOSING"/> 
     </log> 
     <call/> 
    </onComplete> 
</aggregate> 

et en fait avec cette séquence, je suis juste ceci:

<device xmlns="http://ssocial.com/traceit/services/device"> 
<id>25</id> 
<code>mobile_02</code> 
<type> 
    <id>1</id> 
    <name>MOBILE</name> 
</type> 


À l'avance, je vous remercie beaucoup pour l'aide

Répondre

0

Je ne peux pas voir le contenu de "getDeviceInfoProcess" séquence, mais je suppose que vous utilisez appel médiateur. Ainsi, à la suite de ces demandes (requêtes multiples à cause de médiateur itératif), vous recevez des réponses et ce que vous devez traiter dans le reste de la médiation initiale: l'agrégat vous offre un moyen d'attendre toutes les réponses, mais le message initial est perdu: vous devez le sauvegarder dans une propriété (type OM) et utiliser quelque chose comme payloadMediator dans aggregate/onComplete pour composer le message final.

+0

je vois, mais j'ai une question à ce sujet ... comment im censé corréler les informations de périphérique avec le deviceId dans les informations de localisation ?, je veux dire, comment l'agrégat saura que l'information de l'appareil est, est réellement le deviceId = 25 a obtenu dans les informations de localisation?, merci d'avance – Chris

+0

Dans la réponse qui vient de getDeviceInfoProcess, vous avez device/id qui devrait correspondre à deviceId en réponse à getDeviceInfoByLocationProcess? –

+0

ouais, en fait le processus getLocation me donne le deviceId, puis j'appelle pour obtenir cette information de l'appareil qui me donne aussi le deviceId .. im se demandant comment puis-je rejoindre cela, ahah désolé pour les choses compliquées et merci encore – Chris