Я немного переработал вашу существующую функцию, чтобы упростить ее, и я также провел несколько тестов в соответствии с Mule 4.2.1.
Создав структуру данных с более чем 840 уровнями, я смог перемещаться иобрезать поля. Я предполагаю, что из-за структуры данных и ленивых вычислений я могу преодолеть 256 глубин, что является значением по умолчанию, когда DW 2.0 выбрасывает StackOverflow.
Вы также можете увеличить значение по умолчанию, передав время выполненияпараметр, его имя com.mulesoft.dw.stacksize
(например, com.mulesoft.dw.stacksize=500
) или любое другое число при условии, что ваша система может обработать его.
Как я уже сказал, создание хвостовой рекурсивной версии не просто, это усложнит код,он будет менее удобен в обслуживании по сравнению с существующей версией и т. д.
Надеюсь, это поможет, даже если я не отвечаю на ваш вопрос напрямую.
%dw 2.0
output application/json
var ds = {
"message": "Test ",
"read": [
{
"test": " t "
}
]
}
var deepData = (0 to 840) as Array reduce (e, acc=ds) -> {value: " TO_TRIM ",next: acc}
fun trimWS(item) = item match {
case is Array -> $ map trimWS($)
case is Object -> $ mapObject {($$): trimWS($)}
case is String -> trim($)
else -> $
}
---
trimWS(deepData)