Loops WSO2 ESB foreach函数

Loops WSO2 ESB foreach函数,loops,wso2,esb,wso2esb,Loops,Wso2,Esb,Wso2esb,在WSO2 ESB代理服务中,如何基于某个webservice响应的整数值进行迭代,就像“foreach”一样: 例如,此类响应消息: <Response> <noOfcustomers>10</noOfCustomers> </Response> 10 我需要迭代10次(基于客户数量) 这可能吗?我怎样才能做到这一点 谢谢你的帮助 您可以基于xpath。但目前我们没有相应的支持。您的实际用例是什么?我还没有找到一个干净的方法来做到这一

在WSO2 ESB代理服务中,如何基于某个webservice响应的整数值进行迭代,就像“foreach”一样:

例如,此类响应消息:

<Response>
   <noOfcustomers>10</noOfCustomers>
</Response>

10
我需要迭代10次(基于客户数量)

这可能吗?我怎样才能做到这一点


谢谢你的帮助

您可以基于xpath。但目前我们没有相应的支持。您的实际用例是什么?

我还没有找到一个干净的方法来做到这一点,但这里有一个混乱的解决方案

首先,需要进行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 &lt;= $count">
            <iteration>
                <xsl:value-of select="$i"/>
            </iteration>
        </xsl:if>
        <!--begin_: RepeatTheLoopUntilFinished-->
        <xsl:if test="$i &lt;= $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>

1.
然后在序列中使用转换,如下所示:

<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替换消息体,因此,如果您希望重用原始消息,则必须在转换之前使用enrich meditor将其保存到属性中。

这是ESB 4.9以后的ForEach mediator支持的。

感谢您的响应。我需要发送一个包含确定数量的费用(例如10个月)的信用请求,然后如果外部web服务的信用请求获得批准,我需要发送10条消息来创建每个费用信息:付款日期、最低付款日期、付款到期日等。您需要使用克隆中介吗?谢谢克里斯!!让我试试这个解决方案!这实际上是一种非常聪明的方法,我对此表示怀疑。ForEach还需要一个xpath表达式来操作。是的,没有方法在有效负载中的计数器上进行迭代。然而,FOREACH_计数器将有助于跟踪正在发生的迭代次数。