【问题标题】:WSO2 ESB calling parameterized endpoint Looping on ParametersWSO2 ESB 调用参数化端点循环参数
【发布时间】:2015-05-20 21:57:37
【问题描述】:

在我的用例中,我必须链接两个服务调用。特别是:

1) 第一次调用返回一个列出几个 ID 的 xml

2) 我必须遍历返回的 ID 列表并为每个 id-item 进行 ID 参数化服务调用。

3) 最后,我必须收集由每个 ID-service-response 组成的完整响应。

假设第一个服务调用返回如下响应:

<result>     
    <Link>
        <Id>93451</Id>
    </Link>
    <Link>
        <Id>93450</Id>
    </Link>
    ...

第二步是对参数化端点执行一系列调用,如下所示:

http://myEndpoint/entry/eutils/efetch.fcgi?db=pubmed&rettype=abstract&retmode=xml&id=<ID>

每个调用都会返回一个这样的 xml 响应:

<response>
    <field1>value1</field1>
    <field2>value2</field2>
    <field3>value3</field3>
<response>

我必须像这样收集完整的回复:

<finalResponse>
    <response>
        <field1>value1</field1>
        <field2>value2</field2>
        <field3>value3</field3>
    <response>
    <response>
        <field1>value1</field1>
        <field2>value2</field2>
        <field3>value3</field3>
    <response>
    <response>
        <field1>value1</field1>
        <field2>value2</field2>
        <field3>value3</field3>
    <response>
</finalResponse>

我该怎么办?你能给我举个例子吗?谢谢

【问题讨论】:

    标签: loops wso2 wso2esb endpoint uritemplate


    【解决方案1】:

    您需要结合使用迭代中介和聚合中介。这是一个示例代码,但您可能需要进行一些修改才能使其满足您的要求。

    <definitions xmlns="http://ws.apache.org/ns/synapse">
        <proxy name="SampleProxy">
            <target>
                <inSequence>
                    <iterate expression="//result/link/id" preservePayload="true"
                             attachPath="//link">
                        <target>
                            <property name="uri.var.servicepath" expression="//link/id/text()"/>
                            <sequence>
                                <send>
                                    <endpoint key="MyEndpoint"/>
                                </send>
                            </sequence>
                        </target>
                    </iterate>
                </inSequence>
                <outSequence>
                    <property name="FinalResponse" scope="default">
                        <finalResponse />
                    </property>
                    <aggregate>
                        <onComplete expression="//response"
                                    enclosingElementProperty="FinalResponse">
                            <send/>
                        </onComplete>
                    </aggregate>
                </outSequence>
            </target>
        </proxy>
    
        <endpoint xmlns="http://ws.apache.org/ns/synapse" name="MyEndpoint">
            <http uri-template="http://myEndpoint/entry/eutils/efetch.fcgi?db=pubmed&amp;rettype=abstract&amp;retmode=xml&amp;id={ID}" method="GET">
            </http>
        </endpoint>
    </definitions>
    

    有关样本 here 的完整文档。 了解如何参数化您的 url here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      • 2019-02-05
      相关资源
      最近更新 更多