【问题标题】:How do you accumulate values within a ForEach loop in Mule?如何在 Mule 的 ForEach 循环中累积值?
【发布时间】:2019-02-01 07:46:12
【问题描述】:

我有以下 json 输出:

{
  "results": [
    {
      "ID": "1",
      "ImageID": "2",
      "Name": "Test1",
      "Owner": "sysadmin",
      "Author": "sysadmin",
      "Creator": "sysadmin"
	},
	{
      "ID": "2",
      "ImageID": "23",
      "Name": "Test2",
      "Owner": "sysadmin",
      "Author": "sysadmin",
      "Creator": "sysadmin"
	}
  ]
}

对于上述响应中的每个 ID,我需要调用其余服务将 ID 作为参数传递,其余服务将向我发送响应。我必须将所有输出合并到 mule 中的单个 json 响应中。 我尝试使用 for each 和enricher,但无法构建它。下面是我正在使用的代码。

 <foreach doc:name="For Each Loop">
  <logger level="INFO" message="#[payload]" doc:name="Logger" category="INFO"/>
            <json:json-to-object-transformer doc:name="JSON to Object"/>
   <enricher doc:name="Message Enricher">
                <http:request config-ref="SAM" path="/abc/#[payload.ID]" method="GET" doc:name="HTTP"/>
<enrich target="#[flowVars.ID]" source="#[payload[0].ID]"/>
 </enricher>
 <logger level="INFO" message="#[flowVars.ID]" doc:name="Logger" />
 <expression-component doc:name="Expression"><![CDATA[payload.ID = flowVars.ID;    ]]></expression-component> 
 </foreach>

请帮我解决这个问题!

谢谢

【问题讨论】:

    标签: json foreach mule dataweave mule-esb


    【解决方案1】:

    我已经从 savedOutput 中使用了数组变量。

    【讨论】:

      【解决方案2】:

      谢谢杰尼!!

      我通过执行以下操作使其工作:

      <set-variable variableName="outputList" value="#[new java.util.ArrayList()]" doc:name="SetEmptyArray"/>
       <foreach collection="json:packshots" doc:name="ForEachDocument">
                  <set-variable variableName="docName" value="#[json:Name]" doc:name="docName"/>
                  <http:request config-ref="AH_DAM_API_Configuration" path="${ah.dam.api.get.renditions.path}#[json:Name]" method="GET" doc:name="InvokeAHDamService"/>
                  <set-payload value="#[xpath3('//*:service/*:document',payload,'NODE')]" doc:name="fetchRenditionInfo"/>
           <expression-transformer expression="#[flowVars.outputList.add(payload)]" doc:name="AppendResponseToArray"/>
       </foreach>

      【讨论】:

        【解决方案3】:

        您需要在 for-each 循环之前初始化一个空数组,并在 for-each 中添加到该数组中:

        <set-variable variableName="idList" value="#[[]]" doc:name="Variable - Init idList"/>
        <foreach doc:name="For Each Loop">
          <logger level="INFO" message="#[payload]" doc:name="Logger" category="INFO"/>
          <json:json-to-object-transformer doc:name="JSON to Object"/>
          <enricher doc:name="Message Enricher">
            <http:request config-ref="SAM" path="/abc/#[payload.ID]" method="GET" doc:name="HTTP"/>
            <enrich target="#[flowVars.ID]" source="#[payload[0].ID]"/>
          </enricher>
          <logger level="INFO" message="#[flowVars.ID]" doc:name="Logger" />
          <expression-component doc:name="Expression"><![CDATA[flowVars.idList.add(flowVars.ID);]]></expression-component> 
        </foreach>
        

        我在this video 中讨论了这个主题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-08
          • 1970-01-01
          • 2021-07-27
          相关资源
          最近更新 更多