WSO2 ESB プロキシ サービスでは、「foreach」のように、Web サービスの応答からの整数値に基づいてどのように繰り返すことができますか:
たとえば、次のような応答メッセージがあります。
<Response>
<noOfcustomers>10</noOfCustomers>
</Response>
10回反復する必要があります(顧客数に基づく)
これは可能ですか?どうすればこれを達成できますか?
ご協力いただきありがとうございます!
これを行うためのきれいな方法は見つかりませんでしたが、ここに厄介な解決策があります。
まず、XSLT 変換が必要です。
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="xsl xsi">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:param name="iterations"/>
<xsl:template name="for.loop">
<xsl:param name="i"/>
<xsl:param name="count"/>
<!--begin_: Line_by_Line_Output -->
<xsl:if test="$i <= $count">
<iteration>
<xsl:value-of select="$i"/>
</iteration>
</xsl:if>
<!--begin_: RepeatTheLoopUntilFinished-->
<xsl:if test="$i <= $count">
<xsl:call-template name="for.loop">
<xsl:with-param name="i">
<xsl:value-of select="$i + 1"/>
</xsl:with-param>
<xsl:with-param name="count">
<xsl:value-of select="$count"/>
</xsl:with-param>
</xsl:call-template>
</xsl:if>
</xsl:template>
<xsl:template match="/">
<iterations>
<xsl:call-template name="for.loop">
<xsl:with-param name="i">1</xsl:with-param>
<xsl:with-param name="count"><xsl:value-of select="$iterations"/></xsl:with-param>
</xsl:call-template>
</iterations>
</xsl:template>
</xsl:stylesheet>
次に、次のようにシーケンスで変換を使用します。
<inSequence>
<xslt key="conf:/repository/test/iterations.xslt">
<property name="iterations" expression="//noOfcustomers"/>
</xslt>
<iterate expression="//iterations/iteration" sequential="true">
<target>
<sequence>
</sequence>
</target>
</iterate>
</inSequence>
反復メディエーターのシーケンスは、「反復」の各要素に対して実行されます。このアプローチの欠点は、メッセージ本文を反復 XML に置き換えることです。したがって、元のメッセージを再利用する場合は、変換の前にエンリッチ メディターを使用して、元のメッセージをプロパティに保存する必要があります。
xpathに基づいて反復できます。ただし、現在、カウンターのサポートはありません。実際のユースケースは何ですか?
これは、ESB 4.9 以降の ForEach メディエーターでサポートされています。