loops - WSO2 ESB foreach 函数

标签 loops wso2 esb wso2-esb

在 WSO2 ESB 代理服务中,我如何根据某些 Web 服务响应中的整数值进行迭代,就像“foreach”:

例如这样的响应消息:

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

然后您可以像这样在序列中使用转换:

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

关于loops - WSO2 ESB foreach 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16816979/

相关文章:

c - 对用户输入进行错误处理,直到输入正确

mysql - 使用 SQL 迭代列表

wso2 - 将属性从 inSequence 传递到 outSequence

javascript - wso2 EMM iOS 服务器

web-services - Apache Camel 聚合多个REST服务响应

java - 使用 Apache Camel 对 FTP 消费者进行单元测试

open-source - 开源 ESB 和 BPM 工具的建议

javascript - 如何使用 JavaScript 打印基本的圣诞树?

JavaScript 无限 For 循环

wso2 - 禁用 WSO2 证书验证