This post was originally published on: https://dzone.com/articles/mule-4-dataweave-functions-part-1
In DataWeave 2.0, functions are categorized into different modules:
- Core (dw::Core)
- Arrays (dw::core::Arrays)
- Binaries (dw::core::Binaries)
- Encryption (dw::Crypto)
- Diff (dw::util::Diff)
- Objects (dw::core::Objects)
- Runtime (dw::Runtime)
- Strings (dw::core::Strings)
- System (dw::System)
- URL (dw::core::URL)
Functions defined in Core (dw::Core) module are imported automatically into your DataWeave scripts. To use other modules, we need to import them by adding the import directive to the head of DataWeave script, for example:
import dw::core::Strings
import dasherize, underscore from dw::core::Strings
import * from dw::core::Strings
Sample Payload:
{
"firstName" : "Murali",
"lastName" : "Krishna",
"age" : "26",
"age" : "26"
}
1. Core (dw::Core)
Below are the DataWeave 2 core functions:
++ , –, abs, avg, ceil, contains, daysBetween, distinctBy, endsWith, filter, IsBlank, joinBy, min, max, etc.
- result : [0, 1, 2] ++ [“a”, “b”, “c”] will gives us “result” : “[0, 1, 2, “a”, “b”, “c”]”
- result : [0, 1, 1, 2] — [1,2] will gives us “result” : “[0]”
- result : abs(-20) will gives us “result” : 20
- average : avg([1, 1000]) will gives us “average” : 500.5
- value : ceil(1.5) will gives us “value” : 2
- result : payload contains “Krish” will gives us “result” : true
- days: daysBetween(“2016-10-01T23:57:59-03:00”, “2017-10-01T23:57:59-03:00”) will gives us “days”: 365
- age : payload distinctBy $ will gives us:
{
"firstName" : "Murali",
"lastName" : "Krishna",
"age" : "26"
}
- a: “Murali” endsWith “li” will gives us “a” : true
- a: [1, 2, 3, 4, 5] filter($ > 2) will gives us “a” : [3,4,5]
- empty: isBlank(“”) will gives us “empty” : true
- aa: [“a”,”b”,”c”] joinBy “-” will gives us “a” : “a-b-c”
- a: min([1, 1000]) will gives us “a” : 1
- a: max([1, 1000]) will gives us “a” : 1000
2. Arrays (dw::core::Arrays)
Arrays related functions in DataWeave are:
- countBy, divideBy, every, some, sumBy
- [1, 2, 3] countBy (($ mod 2) == 0) will gives us 1
- [1,2,3,4,5] dw::core::Arrays::divideBy 2 will gives us:
[
[
1,
2
],
[
3,
4
],
[
5
]
]
- [1,2,3,4] dw::core::Arrays::every ($ == 1) will gives us “false”
- [1,2,3,4] dw::core::Arrays::some ($ == 1) will gives us “true”
- [ { a: 1 }, { a: 2 }, { a: 3 } ] sumBy $.a will gives us “6”
3. Binaries (dw::core::Binaries)
Binary functions in DataWeave-2 are:
- fromBase64, fromHex, toBase64, toHex
- toBase64(fromBase64(12463730)) will gives us “12463730”
- { “binary”: fromHex(‘4D756C65’)} will gives us “binary” : “Mule”
- { “hex” : toHex(‘Mule’) } will gives us “hex” : “4D756C65”
4. Encryption (dw::Crypto)
Encryption functions in Dataweave – 2 are:
- HMACBinary, HMACWith, MD5, SHA1, hashWith
- { “HMAC”: Crypto::HMACBinary((“aa” as Binary), (“aa” as Binary)) } will gives us :
- “HMAC”: “\u0007£š±]\u00adÛ\u0006‰\u0006Ôsv:ý\u000b\u0016çÜð”
- Crypto::MD5(“asd” as Binary) will gives us “7815696ecbf1c96e6894b779456d330e”
- Crypto::SHA1(“dsasd” as Binary) will gives us “2fa183839c954e6366c206367c9be5864e4f4a65”
5. Diff (dw::util::Diff)
It calculates the difference between two values and returns list of differences.
DataWeave Script:
%dw 2.0
import * from dw::util::Diff
output application/json
var a = { age: "Test" }
var b = { age: "Test2" }
---
a diff b
Output:
{
"matches": false,
"diffs": [
{
"expected": "\"Test\"",
"actual": "\"Test2\"",
"path": "(root).age"
}
]
}
Note:
We will proceed with the rest of the functions in the Mule 4 DataWeave Functions: Part 2 article.
Crypto Encryption Examples are there everywhere what about Decryption of Encrypted value , please someone can comment on same.