WSO2 ESB:聚合来自多个api调用的JSON响应

时间:2016-03-18 02:07:35

标签: json api wso2 aggregate esb

我正在使用WSO2 ESB调解器来尝试创建一个API,该API对特定的Rest API进行分页。我正在使用序列中介的递归来调用动态变化的端点,直到收集完所有数据。不幸的是,我无法弄清楚如何在发送之前将所有响应聚合成一个JSON。

任何帮助都将不胜感激。

这是当前的代码:

<api context="/axceleratePaginated" name="axceleratePaginated">
    <resource methods="GET" protocol="http" url-mapping="/courses">
        <inSequence>
            <property name="uri.var.resource" value="courses"/>
            <property name="uri.var.offset" value="0"/>
            <property name="uri.var.displayLength" value="99"/>
            <property name="JSONContinue" value="true"/>
            <sequence key="paginationSequence"/>
            <send/>
        </inSequence>
        <outSequence>
            <!-- aggregate here? -->
            <send/>
        </outSequence>
    </resource>
</api>
...
<sequence name="paginationSequence" trace="enable">
    <header name="apitoken" scope="transport" value="***********"/>
    <header name="wstoken" scope="transport" value="************"/>
    <call>
        <endpoint>
            <http method="GET" trace="enable" uri-template="https://admin.axcelerate.com.au/api/{uri.var.resource}?displayLength={uri.var.displayLength}&amp;offset={uri.var.offset}"/>
        </endpoint>
    </call>
    <property expression="json-eval($.)" name="JSONPayload"/>
    <filter regex="true" source="get-property('JSONContinue')">
        <then>
            <script language="js">
                <![CDATA[
                    java.lang.Thread.sleep(200);
                    var offset = parseInt(mc.getProperty('uri.var.offset'));
                    offset += 100;
                    var pl_string = mc.getProperty('JSONPayload');
                    var JSONPayloadLength = pl_string.length();
                    if (JSONPayloadLength === 3){
                        mc.setProperty('JSONContinue','false');
                    }
                    offset = offset.toString();
                    mc.setProperty('uri.var.offset',offset);
                ]]>
            </script>
            <sequence key="paginationSequence"/>
        </then>
    </filter>
</sequence>

1 个答案:

答案 0 :(得分:0)

您可以使用Loopback介体[1]将消息从流(请求路径)发送到out流(响应路径)。

[1] https://docs.wso2.com/display/ESB490/Loopback+Mediator