Search code examples
muledataweavemulesoftmule4

override skipNullOn="everywhere"


I have divided my dataweave script into modules, and I have used skipNullOn="everywhere" in the main dwl, so all the null values in all the modules are skipped. But, I don't want to skip the null values of a particular modules. How do I override(nullify) the skipNullOn="everywhere" for that particular module.

Input:

<XML xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <ABC xsi:nil="true"/>
    <DEF/>
</XML>

dataweave code:

%dw2.0
output application/json skipNullOn="everywhere"
---
payload.XML

Expected Output( json):

{
"ABC": ""
}

Getting Output(json):

{

}

Solution

  • Since I am answering it pretty late, I am not sure if this of much help to you. Anyways, you can have the list of nodes for which you want to skip the 'skipNullOn' check in a comma separated format in the property file. And then you try something similar as I have here below, which will help you iterate over all the nodes and then achieve the output as you desire:

    %dw 2.0
    output application/json skipNullOn="everywhere"
    var toSkipNullOn='ABC,XYZ'
    
    fun checkNull(key,val) = if((toSkipNullOn splitBy(',')) contains(key as String)) ''  else null
    ---
    payload.XML mapObject (v0, k0, i0) -> 
    {
        (k0):checkNull(k0,v0) 
    }
    

    In this example I have hardcoded the node names (ABC,XYZ) to the variable toSkipNullOn. Instead of that you'll have to read it from the property file as p('key-name') and assign it to toSkipNullOn.enter image description here