Как я могу проверить внутри Set Variable (Mule 4), если параметр существует без ошибки выбора значения? - PullRequest
2 голосов
/ 01 октября 2019

Я использую Mule 4, и у меня есть Селектор ошибок значения, когда полезная нагрузка является строкой, а не имеет следующую структуру:

{"status": 0, "content": {"status": "201",...........

Я использую переменную set в Mule 4, задающую это значение:

<set-variable value="#[if (payload.content? and payload.content.status? and payload.content.status &gt;= 200) payload.content.status else 500]" doc:name="Set Status" doc:id="e9ce4fd1-9664-4401-b9a2-e47913b689af" variableName="httpStatus"/>

Я использую условие:

if (payload.content? and payload.content.status? and payload.content.status >= 200) payload.content.status else 500

, но иногда сервер может ответить на строку типа «Не авторизован», тогда payload.content не существует, простострока.

Set Variable дает мне эту ошибку, когда полезной нагрузкой является строка

"\"You called the function 'Value Selector' with these arguments: \n 1: Binary (\"Richiesta Non Autorizzata\" as Binary {encoding: \"UTF-8\", mediaType: \"text/ht...)\n 2: Name (\"content\")\n\nBut it expects one of these combinations:\n (Array, Name)\n (Array, String)\n (Date, Name)\n (DateTime, Name)\n (LocalDateTime, Name)\n (LocalTime, Name)\n (Object, Name)\n (Object, String)\n (Period, Name)\n (Time, Name)\n\n1| if (payload.content? and payload.content.status? and payload.content.status >= 200) payload.content.status else 500\n ^^^^^^^^^^^^^^^\nTrace:\n at main (line: 1, column: 5)\" evaluating expression: \"if (payload.content? and payload.content.status? and payload.content.status >= 200) payload.content.status else 500\".",

Ответы [ 2 ]

1 голос
/ 01 октября 2019

Лучший способ, о котором я могу подумать, - это вместо проверки, существует ли поле, проверить, является ли значение Object, тогда вы можете убедиться, что .status будет работать

if (payload.content is Object and payload.content.status? and payload.content.status >= 200) 
    payload.content.status 
else 500
1 голос
/ 01 октября 2019

Используйте payload.content.status default {}, или вы можете по умолчанию установить строку или другое значение, которое вы сможете сравнить позже и работать с ним.

...