【问题标题】:Iterating an array using Mule's foreach scope使用 Mule 的 foreach 范围迭代数组
【发布时间】:2013-10-03 02:22:45
【问题描述】:

我想遍历一个数组并使用从数组中获取的值将其放入一个 http 入站端点。我如何能够遍历该数组并从数组中获取值以将其作为变量放置在 http 入站端点中?

我曾经尝试过的代码是:

<flow name="foreachFlow1" doc:name="foreachFlow1">
    <poll frequency="2000">
    <foreach collection="#[groovy:['localhost:8082', 'localhost:8083']]"
        doc:name="For Each">
        <http:outbound-endpoint exchange-pattern="request-response"
            address="http://#[payload]" method="GET" doc:name="HTTP" />
    </foreach>
    </poll>
</flow>

我得到了错误

Invalid content was found starting with element 'poll'

【问题讨论】:

  • 你想达到什么目的:监听一堆不同的端口/路径?我会根据您的说明审核我的回答。
  • 我正在尝试使用 google.com" connector-ref="PollingHttpConnector" doc:name= 轮询多个地址“HTTP”/> 的地址字段包含一个变量,以便通过不同的地址进行轮询。因此,我正在考虑使用数组来遍历要轮询的地址列表。这可能吗?
  • 嗨,Emm,基本上,迭代中的每个项目都绑定到有效负载,因此您可以使用 #[payload] 来访问它。您的上一个问题中有一个示例:stackoverflow.com/questions/18970495/…

标签: foreach mule


【解决方案1】:

入站端点是消息源,不能按照您描述的方式进行参数化。

为了实现您的目标,尝试使用&lt;poll&gt; 消息源来包装foreach,该http:outbound-endpoint 使用GET (@method) request-response (@exchange-apttern) 交互。

诀窍是通过foreach 将HTTP 调用的结果带回,默认情况下不这样做。以下说明了一种可能的方法:

<flow name="foreachFlow1">
    <poll frequency="2000">
        <processor-chain>
            <set-variable variableName="httpResponses" value="#[[]]" />
            <foreach collection="#[groovy:['localhost:8082', 'localhost:8083']]">
                <http:outbound-endpoint
                    exchange-pattern="request-response" address="http://#[payload]"
                    method="GET" />
                <expression-component>httpResponses.add(message.payloadAs(java.lang.String))
                </expression-component>
            </foreach>
        </processor-chain>
    </poll>
    <logger level="INFO" message="#[httpResponses]" />
</flow>

<!-- Test server stubs -->

<flow name="server8082">
    <http:inbound-endpoint exchange-pattern="request-response"
        address="http://localhost:8082" />
    <set-payload value="This is 8082" />
</flow>

<flow name="server8083">
    <http:inbound-endpoint exchange-pattern="request-response"
        address="http://localhost:8083" />
    <set-payload value="This is 8083" />
</flow>

【讨论】:

  • @davis 我尝试使用上一个问题中的示例并使用 消息源来包装 foreach,但我收到错误“发现以元素 'poll' 开头的无效内容”。我编辑了我的原始问题并将代码放在那里
  • 删除&lt;http:inbound-endpoint&gt;:每个流只能有一个消息源,poll 是一个消息源。
  • 我忘记显示注释掉的 但即使删除它我仍然得到错误。
  • 您是并且您的配置在 Mule 3.4.0 CE 上完全有效。我猜是 Studio 而不是 Mule 报告了Invalid content was found starting with element 'poll'?如果是这种情况,请忽略它,Studio 并没有完全理解 Mule XSD。您遇到的实际问题是 foreach 不会将它包含的消息处理器的结果传播回调用者。我正在尝试寻找解决方法。
  • 如果我使用上一个问题中示例中的确切代码,但只是注释掉 &lt;http:inbound-endpoint&gt; 并添加 poll,我会收到错误 The content of element 'flow' is not complete.。我不明白为什么它不完整..
猜你喜欢
  • 2017-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-03
  • 2019-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多