Код Dataweave не работает mule 4, который работал в mule3 - PullRequest
0 голосов
/ 11 февраля 2019

Следующий фрагмент кода работал в 3.8, но не работал в 4.1:

output application/java
var csv = payload
---
(csv map $ reduce ((val,acc) -> ((acc) ++ ((val)) ))) map ($ replace ',' with '\t')

input payload: 

{"D01":{"AK":"D,01,AK,0,0,0,0,0,-2.89,0.00,0,0,0,0,0",
        "AL":"D,01,AL,829.23,18506.35,0,0.00,0,-6610.91,0.00,0,0,0,159.66,-1.94"},
"D02.1":{"AK":"D,02.1,AK,0,0,0,0,0,-6.76,0.00,0,0,0,0,0",
        "AL":"D,02.1,AL,7733.77,304148.90,0,0.00,0,-42791.15,0.00,0,0,0,1347.09,-8.88"}
} 

введите код здесь

Ожидаемый результат: ["D \ t01 \ tAK \ t0 \ t0 \t0 \ t0 \ t0 \ t-2.89 \ t0.00 \ t0 \ t0 \ t0 \ t0 \ t0 "," D \ t01 \ tAL \ t829.23 \ t18506.35 \ t0 \ t0.00 \ t0 \ t-6610.91 \ t0.00 \ t0 \ t0 \ t0 \ t159.66 \ t-1.94 "," D \ t02.1 \ tAK \ t0 \ t0 \ t0 \ t0 \ t0 \ t-6.76 \ t0.00 \ t0 \t0 \ t0 \ t0 \ t0 "," D \ t02.1 \ tAL \ t7733.77 \ t304148.90 \ t0 \ t0.00 \ t0 \ t-42791.15 \ t0.00 \ t0 \ t0 \ t0 \ t1347.09 \ t-8.88 "]

Ошибка ниже:

org.mule.runtime.core.internal.exception.OnErrorPropagateHandler:


Сообщение:"Вы вызвали функцию 'map' со следующими аргументами:
1: String ("{\" D01 \ ": {\" AK \ ": \" D, 01, AK, 0,0,0,0,0, -2,89,0,00,0,0,0,0,0 \ ", \" AL \ ": \" D, 01, A ...)
2: Функция (($: Any, $$:Любой) -> ???)

Но он ожидает аргументы следующих типов:
1: Массив
2: Функция

13 | (CSV-карта $ Reduce ((Val, acc) -> ((acc) ++ ((val))))) map ($ replace ',' with '\ t') ^^^^^^^^^

1 Ответ

0 голосов
/ 12 февраля 2019

Я думаю, что проблема есть, map в DataWeave 2 не работает на Object (см. изменения ).DataWeave 1 допустил это, и, следовательно, ваш код был действителен для DataWeave 1.

На основании выходных данных с DataWeave 1, я думаю, вы можете использовать следующий код для DataWeave 2 -

%dw 2.0
output application/java
var csv = payload
---
flatten ((csv pluck $) map ($ pluck $)) map ($ replace ',' with '\t')

pluck разделит объект на два массива - значения ($) и ключи ($$).

...