繁体   English   中英

WSO2 ESB迭代调解员加入

[英]WSO2 ESB iterate mediator joining

我在此过程中遇到了一些问题..让我解释一下:

我想呼叫两个服务并按以下顺序加入响应:

我有第一项服务的回复:

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

然后我收到了secon服务的回复:

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


然后,我希望得到的最终答复是:

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

实际上,按此顺序,我得到的是:

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


预先,非常感谢您的帮助

我看不到“ getDeviceInfoProcess”序列的内容,但是我想您正在使用调用介体。 因此,由于这些请求(由于迭代器的缘故,出现了多个请求),您会收到一些响应,并且在其余的初始中介中您必须处理:聚合为您提供了一种等待所有响应的方式,但是最初的消息丢失:您应该将其保存在属性(OM类型)中,并在aggregate / onComplete内部使用诸如payloadMediator之类的内容来编写最终消息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM