Код dataweave 2 работает на одной машине, но не на другой (та же версия O / S и Anypoint Studio) - PullRequest
0 голосов
/ 30 апреля 2020

У меня проблема с копированием кода dataweave 2 с одного компьютера на другой (Windows 10 и Anypoint Studio 7, Mule Server 4.2.2 EE):

  1. Экспорт файла jar из компьютер A
  2. Импорт того же файла JAR в Anypoint Studio на компьютере B
  3. Работа / проверка кода на машине B
  4. Скопируйте код преобразователя (dataweave 2) из компьютер B для черновика gmail
  5. Откройте gmail на компьютере A и скопируйте код на тот же преобразователь
  6. Есть ошибки - иногда только одна, а иногда много ошибок

Например:

%dw 2.0
output application/json
var addr = payload.PersonInfo.AddressList.Address 
---
{
    Addresses: if (addr is Object)
        [addr] map ( address ) -> {
        Suburb: address.City
        }
    else 
        addr map ( address ) -> {
        Suburb: address.City
    }
}

ошибка указывает на первую функцию карты: 'Invalid input "map (address) -> {\r\n\tSuburb: address.City\r\n\t ", expected Function Call (line 7 column 10):

Любая помощь будет высоко ценится.

1 Ответ

0 голосов
/ 03 мая 2020

В ОС нет ничего плохого - все проблемы с данными / полезной нагрузкой и сценарием Dataweave. Во-первых, функция map предназначена для Array, но в сообщении об ошибке отображается String with Object. Исходя из вопроса, скрипт должен рассчитывать на работу с массивом или строкой и должен адаптироваться к нему.

Вот пример, как это сделать https://simpleflatservice.com/mule4/ChangeStringToJsonOnTheFly.html

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

%dw 2.0
var xAsObject=[{City:'AlbanyObject',State:'NY'},{City:'Seattle',State:'WA'}]
var xAsString='[{"City":"AlbanyString","State":"NY"},{"City":"Seattle","State":"WA"}]'
output application/json
var addr = xAsString
//var addr = xAsObject 
---
{
    Addresses: if (addr is Array)
        [addr] map ( address, index ) -> {
        Suburb: address.City
        }
    else if (addr is String )
        ( read ( ( addr default '' ), 'application/json' ) ) map ( address, index ) -> {
        Suburb: address.City
    }
    else {Suburb: 'Unknown'}
}

Возможные выходы (для строки)

{
  "Addresses": [
    {
      "Suburb": "AlbanyString"
    },
    {
      "Suburb": "Seattle"
    }
  ]
}

и для массива

{
  "Addresses": [
    {
      "Suburb": [
        "AlbanyObject",
        "Seattle"
      ]
    }
  ]
}
...