如何在Mule DataWeave中检查NullPayload?
在Mule 3.8.5 DataWeave中检查NullPayload的正确方式
我完全懂你遇到的这个困扰——Mule 3.x里的DataWeave 1.0对NullPayload的判断逻辑确实和普通null不一样,很容易因为语法细节踩坑。你之前的报错都是因为类型引用的写法不对,下面给你讲正确的用法:
正确的判断语法
在DataWeave 1.0里,NullPayload是一个特定的内置类型,判断时必须用**:NullPayload**(注意冒号在类型名前面),而不是直接写NullPayload。比如你要判断整个payload是不是NullPayload,应该这么写:
payload is :NullPayload
如果是要判断payload里的某个元素(比如你提到的payload[1]),要注意先确保整个payload不是NullPayload,不然直接取索引会报错。可以这样写:
%dw 1.0 %output application/json --- when payload is :NullPayload -> "Whole payload is NullPayload" when payload[1] is :NullPayload -> "The second element is NullPayload" otherwise -> "Valid payload elements"
为什么你之前的写法会报错
- 你第一次写
when payload[1] is NullPayload时,因为没有给类型名加前置冒号,DataWeave会把NullPayload当成普通变量,所以提示“缺少冒号”; - 如果错误地写成
is :NullPayload(冒号后加空格),DataWeave会解析失败,因为它期望的是连续的:类型名格式,所以会报“Invalid input ":NullPayload ", expected :trait or :type”。
额外提醒
要注意Mule 3.x的DataWeave 1.0和Mule 4的DataWeave 2.0差异很大:Mule 4里已经把NullPayload和普通null统一了,直接用payload == null就能判断,但在你用的3.8.5版本里,必须严格区分普通null和NullPayload,用:NullPayload来判断后者。
内容的提问来源于stack exchange,提问作者Maria
相关产品推荐
相关产品推荐

