关于如何将 Mule 3 代码转换为 Mule 4 的输入

Inputs on how to convert Mule3 code to Mule4

我们正在将项目从 mule3 迁移到 mule4,使用 MMA 迁移后遇到以下 MEL 或 DW 代码。任何有关如何将这些转换为 mule4 代码的输入都将受到赞赏。有些变量可能会混淆例如。 tempMonthlyData、dataRecord、MonthlyData 等,“属性 代码”是一个字符串。 所有变量都是 json 个对象

payload.get(flowVars.processingSheet)

mel:payload.key.split(" ")[0].toLowerCase()

flowVars.appendix.get(flowVars.propertyKey)  != null

vars.dataRecord.put("Property Code", yardiPropList.get(referenceId))

mel:propertiesNotInmule.remove(referenceId)

mel:tempMonthlyData.add(dataRecord)

mel:payload.replace("MonthlyData", tempMonthlyData)

mel:dataRecord.put("Property Code", "")

问题缺乏上下文和细节。我将不得不在答案中做出一些有根据的猜测来减轻这种情况。按方法查看答案。

注意,其中 none 是 Mule 操作。它完全等同于 MEL 表达式中的 Java 代码。您需要确切地了解什么是 Java class 和方法,才能找到等效的方法。

get() 如果 payload 是 org.json.JSONObject 那么 get() 方法 returns 带有键的属性的值 flowVars.processingSheet.

payload.get(flowVars.processingSheet)

Mule 4 不使用 org.json 但它使用 DataWeave 来转换 JSON 值。等价于:

payload[vars.processingSheet]

split() 我假设这是 Java String split() 方法。

payload.key.split(" ")[0].toLowerCase()

DataWeave 中的等效表达式是:

lower((payload.key splitBy (" "))[0])

put()

如果这是 JSONObject.put() 方法,那么在更新插入模式下使用更新运算符将类似于:

%dw 2.0
output application/json
---
vars.someVariable update {
        case .DataRecord! ->  vars.yardiPropList
}

替换() 假设它是一个 Map 方法,因为它不存在于 JSONObject 中,使用没有更新插入功能的更新运算符 (!)。

删除() 如果这是 Map.remove() 方法,您可以使用减号运算符获得类似的结果:

payload - vars.referenceId

add() 假设它是一个 Java 列表,那么你可以只使用连接运算符:

vars.tempMonthlyData ++ vars.dataRecord

请注意,DataWeave 是一种函数式编程语言,没有副作用,因此它不会更改输入,而是创建新的输出。您需要将该输出分配给有效负载或变量。