3

私のユースケースでは、2 つのサービス呼び出しをチェーンする必要があります。特に:

1) 最初の呼び出しは、いくつかの ID をリストする xml を返します。

2) 返された ID リストを繰り返し処理し、ID 項目ごとに ID パラメータ化されたサービス呼び出しを行う必要があります。

3) 最後に、各 ID サービス レスポンスで構成されるレスポンス全体を収集する必要があります。

最初のサービス呼び出しが次のような応答を返したとします。

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

2 番目のステップは、次のようにパラメーター化されたエンドポイントへの一連の呼び出しを実行することです。

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>

どのようにできるのか?例を挙げていただけますか?ありがとう

4

1 に答える 1

3

反復メディエーターと集約メディエーターを組み合わせて使用​​する必要があります。以下にサンプル コードを示しますが、必要に応じて機能させるには、いくつかの変更が必要になる場合があります。

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

関連するサンプルの完全なドキュメントはこちら. ここでURL をパラメータ化する方法を見つけてください。

于 2015-05-21T01:10:06.263 に答える