Раньше я преобразовывал полезную нагрузку в строку всякий раз, когда мне нужно регистрировать полезную нагрузку на консоли, используя синтаксис в mule 3 [message.payloadAs(java.lang.String)] и несколько раз использовал преобразователь объекта в строку или объект в массив.
Но в муле 4 я не вижу конвертера, как в муле 3, и [message.payloadAs(java.lang.String)] тоже не работает.
Пожалуйста, помогите мне, появился ли новый синтаксис компонента или концепции в муле 4?
Вход
[
{
"firstName": "Ram",
"lastName": "Ram1",
"address": [
{
"street": "a",
"city": "b",
"state": "c"
},
{
"street": "a1",
"city": "b1",
"state": "c1"
}
]
}
Код
<batch:job jobName = "Batch_ProcessingBatch_Job" doc:id = "2582eccb-720f-499f-99fe-424cab3c9a33" >
<batch:process-records >
<batch:step name = "Batch_Step1" doc:id = "cb045f6b-edd3-426f-8f28-0d20b301fb6d" >
<logger level = "INFO" doc:name = "Logger" doc:id = "2491184f-e8d7-47b7-bef0-29bafd43247f" message = "In Batch_step1........... #[payload]"/>
<batch:aggregator doc:name = "Batch Aggregator" doc:id = "aa9c1b60-395f-4376-804d-bced200dfb43" size = "2">
<set-payload value='#[write(payload, "application/json")]' doc:name = "Set Payload" doc:id = "9d4b27ee-5692-4a99-a93e-bd7c694f398d" />
<ee:transform doc:name = "Transform Message" doc:id = "06064422-1352-4ff9-8817-3e87eb1f4264" >
<ee:message >
<ee:set-payload ><![CDATA[%dw 2.0
output application/json
---
payload map(item,index) -> {
name: item.firstName,
surname: item.lastName
}]]></ee:set-payload>
</ee:message>
</ee:transform>
<logger level = "INFO" doc:name = "Logger" doc:id = "c955490e-fab1-436e-8265-f706a577c9d2" message = "In Batch_step1 Aggrigator........... #[payload]" />
</batch:aggregator>
</batch:step>
</batch:process-records>
<batch:on-complete >
<logger level = "INFO" doc:name = "Logger" doc:id = "a3923c90-557b-4955-9c40-afd748719abd" message = "#['#####It is oncomplete result####': write(payload, "application/json")]"/>
</batch:on-complete>
</batch:job>
Получение ошибки
Message : "You called the function 'map' with these arguments:
1: String ("[\n \"{\\n \\\"firstName\\\": \\\"Ram\\\",\\n \\\"lastName\\\": \\\"Ram1\...)
2: Function ((item:Any, index:Any) -> ???)
But it expects arguments of these types:
1: Array
2: Function
4| payload map(item,index) -> {
| ...
7| }
Trace:
at map (line: 4, column: 1)
at main (line: 4, column: 9)" evaluating expression: "%dw 2.0
output application/json
---
payload map(item,index) -> {
name: item.firstName,
surname: item.lastName
}".
Error type : MULE:EXPRESSION
Element : Batch_ProcessingFlow/processors/0/route/0/route/0/aggregator/processors/1 @ training-1:Batch Processing.xml:27 (Transform Message)
Element XML : <ee:transform doc:name = "Transform Message" doc:id = "06064422-1352-4ff9-8817-3e87eb1f4264">
<ee:message>
<ee:set-payload>%dw 2.0
output application/json
---
payload map(item,index) -> {
name: item.firstName,
surname: item.lastName
}</ee:set-payload>
</ee:message>
</ee:transform>
(set debug level logging or '-Dmule.verbose.exceptions=true' for everything)
********************************************************************************





После быстрого поиска в Google новый способ — использовать #[message.payload as String], как показано в ссылка на сайт.
Вы можете использовать синтаксис payload.^raw для регистраторов. Он был представлен в mule 4 и может обрабатывать случаи, когда требуется преобразование строк. Обычно хорошо сочетается с форматом output text/plain в регистраторе.
Ссылка: https://docs.mulesoft.com/mule-runtime/4.3/dataweave-cookbook-extract-data#metadata_selector
ПРИМЕЧАНИЕ. Никогда не рекомендуется регистрировать всю полезную нагрузку (которая может содержать PII и т. д.), за исключением, возможно, случая, когда вы создаете отчет, который необходимо зарегистрировать в конце пакетного процесса, что, возможно, может иметь место здесь. .
обновленный ответ на новый вопрос.