Присоединение посредника итерации WSO2 ESB

я столкнулся с некоторыми проблемами с этим процессом .. позвольте мне объяснить:

я хочу вызвать две службы и присоединиться к ответам в следующем порядке:

у меня есть ответ первой службы:

<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>

то у меня есть ответ второй службы:

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


And then, the final response that i would like to have is :

<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>

у меня действительно много проблем с попыткой объединить оба ответа, и это моя последовательность в 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>

and actually with this sequence, i'm just getting this:

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


In advance , thank you very much for the help


person Chris    schedule 04.09.2016    source источник


Ответы (1)


Я не вижу содержимое последовательности «getDeviceInfoProcess», но я предполагаю, что вы используете посредник вызовов. Итак, в результате этих запросов (несколько запросов из-за повторного посредника) вы получаете некоторые ответы и то, с чем вам приходится иметь дело в остальной части первоначального посредничества: агрегат предлагает вам способ дождаться всех ответов, но исходное сообщение потеряно: вы должны сохранить его в свойстве (типа OM) и использовать что-то вроде payloadMediator внутри агрегата/onComplete для составления окончательного сообщения.

person Jean-Michel    schedule 05.09.2016
comment
Я понимаю, но у меня есть вопрос по этому поводу... как я должен сопоставить информацию об устройстве с идентификатором устройства в информации о местоположении? Я имею в виду, как совокупность узнает, что полученная информация об устройстве фактически получена из идентификатора устройства = 25 получил информацию о местонахождении?, заранее спасибо - person Chris; 05.09.2016
comment
В ответе, полученном от getDeviceInfoProcess, у вас есть устройство/идентификатор, который должен соответствовать идентификатору устройства в ответе от getDeviceInfoByLocationProcess? - person Jean-Michel; 06.09.2016
comment
да, на самом деле процесс getLocation дает мне deviceId, затем я звоню, чтобы получить информацию об этом устройстве, которая также дает мне deviceId.. мне интересно, как я могу присоединиться к этому, ахах, извините за сложные вещи, и еще раз спасибо - person Chris; 06.09.2016