Используйте каждый элемент var, чтобы сделать http-запрос в Mule - PullRequest
0 голосов
/ 11 июля 2019

У меня есть коллекция matches, сохраненная в var.Каждый match имеет gameId.Я хочу использовать это gameId для вызова API.
Я настроил для каждой области, используя matches с counter var.

<set-variable value="#[payload]" doc:name="Set Matches" doc:id="bb1093b0-3dd9-4515-8f42-dd496f00477b" variableName="matches"/>
<set-variable value="#[[]]" doc:name="Deaths" doc:id="a7341e19-07f8-418d-b39a-5bc415e75fba" variableName="deaths"/>
<foreach doc:name="For each match" doc:id="506fa944-d46f-4684-9c75-73088265ca80" collection="vars.matches" rootMessageVariableName="matches">
    <http:request method="GET" doc:name="GetTimeline" doc:id="63708489-4d10-4e79-b5aa-c8fc723e80c6" config-ref="HTTP_Request_configuration" path="/match/v4/timelines/by-match/{matchId}">
        <http:uri-params ><![CDATA[#[output application/java
---
{
    "matchId" : vars.matches[vars.counter + 1].gameId
}]]]></http:uri-params>
    </http:request>
    <ee:transform doc:name="MapDeaths" doc:id="a6e22968-2229-4574-8cae-44225013b9cf">
        <ee:message>
            <ee:set-payload><![CDATA[%dw 2.0
output application/json
---
{
    frames: payload.frames map ( frame , indexOfFrame ) -> {
        events: frame.events map ( event , indexOfEvent ) -> vars.deaths + event
    }
}]]></ee:set-payload>
        </ee:message>
    </ee:transform>
</foreach>

Пока что matchId с "matchId" : vars.matches[vars.counter + 1].gameId всегда равно нулю.Что мне там не хватает?
Редактировать:
Я использую Mule 4.2 и структура совпадений json выглядит следующим образом:

[
  {
    "matches": [
      {
        "key": "val",
        "key": val,
        ...
      },
      {
        "key": "val",
        "key": val,
        ...
      },
      ...

Ответы [ 2 ]

0 голосов
/ 15 июля 2019

Кажется, проблема в том, что ваша полезная нагрузка и выражение, которое вы используете, не совпадают (каламбур не предназначен).Полезная нагрузка - это массив, содержащий объекты с атрибутом совпадений.Выражение очевидно предполагает, что полезная нагрузка содержит атрибут совпадений, который содержит атрибут gameId.По этой причине он возвращает значение NULL.

Также намерение неясно, учитывая, что вы не показали, где был gameId в вашем примере.

Давайте попробуем с более подробным примером.

Для ввода:

[
  {
    "matches": [
      {
        "keyA": "val1",
        "keyB": "val2"
      },
      {
        "keyC": "val3",
        "keyD": "val4"
      }
    ]
  }
]

Выражение payload.matches.keyA возвращает null.

Вы можете сделать payload[0].matches[0].keyA, чтобы получить "val1".

Предполагается, что данные получены из первого элемента массива, и вы хотите использовать только один ключ из одного из совпадений.Конечно, если вам нужно перебрать разные уровни массивов, вам нужно будет использовать карту или группу, но это другой вариант использования.

0 голосов
/ 12 июля 2019

Установите {matchId} в качестве параметра строки запроса и определите запрос целевой переменной, используйте ее в dataweave

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...