Объединить произвольное количество для каждой выходной полезной нагрузки mulesoft - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь создать поток, который принимает параметры URI, которые были вызваны, и использует их для вызова другого потока (количество вызовов другого потока зависит от количества параметров URI).

    <flow name="get:/test-config">

    <set-variable value="#[message.inboundProperties['http.query.params']]" variableName="params" doc:name="Variable"/>

    <!-- Iterate over the keys to retrieve each params list -->
    <foreach collection="#[flowVars['params'].keySet()]" doc:name="For Each">

        <!-- Iterate over the params list for each key -->
        <foreach collection="#[params.getAll(payload)]" doc:name="For Each">

            <logger level="WARN" message="Parameter - key: #[rootMessage], value: #[payload]" doc:name="Logger"/>

            <set-variable variableName=„Id“ value="#[payload]" doc:name="Variable"/>

            <logger message="Id: #[payload]" level="INFO" doc:name="Logger"/>

            <http:request config-ref="HTTP_REQUEST" path=„/test1/foo“ method="GET" doc:name="HTTP">
                <http:request-builder>
                    <http:query-param paramName=„Id" value="#[flowVars.Id]"/>
                </http:request-builder>
            </http:request>

            <dw:transform-message doc:name="Transform Message">
                <dw:set-payload><![CDATA[%dw 1.0
                    %output application/json
                    ---
                    {
                        "Id" : flowVars.Id,
                        "color" : payload.*color
                    } ]]>
                </dw:set-payload>
             </dw:transform-message>

             <logger message="#[payload]" level="INFO" doc:name="Logger"/>

         </foreach>

    </foreach>

    </flow>

Поток, который вызывается через HTTP-запрос, доставляет данные в формате JSON:

   "Id": "1",
       "color": [
           "blue",
           "green"
       ]

   "Id": "2",
       "color": [
           "yellow",
           "blue"
       ]

   "Id": "3"
   ...

   "Id" : "4"
   ...

Я хотел бы отфильтровать и объединить эти выходные данные, чтобы общий результат выглядел следующим образом:

     "Ids": [
         "1",
         "2"
      ]
      "commonColor": [
           "blue"
      ]

И в этот момент я немного застрял, так как количество объединяемых наборов данных варьируется, и я также не совсем знаю, как получить доступ и сравнить поля полезной нагрузки, чтобы найти элементы ссоответствие цветов, так как полезная нагрузка меняется с каждой итерацией.Одна идея, с которой я столкнулся, состояла в том, чтобы сохранить / добавить текущую полезную нагрузку в переменную, чтобы сохранить ее для дальнейшей обработки, но все примеры просто работали с 2 или максимум тремя полезными нагрузками, тогда как я столкнулся с произвольным количеством возможных полезных нагрузок (и положение / количество цветов также меняется ...).

Буду очень признателен за любые идеи / помощь по решению этой проблемы!

PS: Я также сталкивался с Scatter / Gather, но я не совсем уверен, подходит ли он в этом случае, так как я заранее не знаю количество вызовов / промежуточных результатов ...

...