Mule 空节点的Dataweave错误
我已经用dataweava编写了Mule 空节点的Dataweave错误,mule,mule-studio,mule-component,mule-el,dataweave,Mule,Mule Studio,Mule Component,Mule El,Dataweave,我已经用dataweava编写了 %dw 1.0 %input payload application/xml %output application/xml skipNullOn="everywhere" --- {((payload.*Order default []) map { Order:{ Channel:$.@EnterpriseCode, Code:$.@OrderNo, Status:$.@Status, OrderLines: { ((
%dw 1.0
%input payload application/xml
%output application/xml skipNullOn="everywhere"
---
{((payload.*Order default []) map {
Order:{
Channel:$.@EnterpriseCode,
Code:$.@OrderNo,
Status:$.@Status,
OrderLines: {
(($.OrderLines.*OrderLine default []) map {
OrderLine:{
EntryNumber:"abc",
Status:$.@Status,
(($.OrderStatuses.*OrderStatus default []) map {
ShipDate:$.@StatusDate
})
}})}
}
}
)
}
但在将输入指定为
<?xml version="1.0" encoding="UTF-8"?>
<Order EnterpriseCode="111" OrderNo="222" Status="Scheduled">
<OrderLines>
<OrderLine PrimeLineNo="2" Status="Shipped" OrderedQty="1000">
</OrderLine>
</OrderLines>
</Order>
有什么建议吗?我尝试了
default[]
,但它不起作用。分配空节点时
其给定错误。我已尝试将筛选器作为筛选器($!='')
XML输入示例进行筛选:
<?xml version="1.0" encoding="UTF-8"?>
<Order EnterpriseCode="111" OrderNo="222" Status="Scheduled">
<OrderLines>
<OrderLine PrimeLineNo="2" Status="Shipped" OrderedQty="1000">
<OrderStatuses>
<OrderStatus StatusDate="statusDate"></OrderStatus>
<OrderStatus StatusDate="statusDate"></OrderStatus>
</OrderStatuses>
</OrderLine>
<OrderLine PrimeLineNo="3" Status="Shipped3" OrderedQty="10003" ></OrderLine>
</OrderLines>
</Order>
%input payload application/xml
%output application/xml skipNullOn="everywhere"
---
{
((payload.*Order default []) map {
Order:{
Channel:$.@EnterpriseCode,
Code:$.@OrderNo,
Status:$.@Status,
OrderLines: {
(($.OrderLines.*OrderLine default []) map {
OrderLine:{
EntryNumber:"abc",
Status:$.@Status,
(($.OrderStatuses.*OrderStatus default []) map ((key,pos) -> {
ShipDate:key.@StatusDate
}) when $!='' otherwise {})
}
})
}
}
})
}
数据编织脚本:
<?xml version="1.0" encoding="UTF-8"?>
<Order EnterpriseCode="111" OrderNo="222" Status="Scheduled">
<OrderLines>
<OrderLine PrimeLineNo="2" Status="Shipped" OrderedQty="1000">
<OrderStatuses>
<OrderStatus StatusDate="statusDate"></OrderStatus>
<OrderStatus StatusDate="statusDate"></OrderStatus>
</OrderStatuses>
</OrderLine>
<OrderLine PrimeLineNo="3" Status="Shipped3" OrderedQty="10003" ></OrderLine>
</OrderLines>
</Order>
%input payload application/xml
%output application/xml skipNullOn="everywhere"
---
{
((payload.*Order default []) map {
Order:{
Channel:$.@EnterpriseCode,
Code:$.@OrderNo,
Status:$.@Status,
OrderLines: {
(($.OrderLines.*OrderLine default []) map {
OrderLine:{
EntryNumber:"abc",
Status:$.@Status,
(($.OrderStatuses.*OrderStatus default []) map ((key,pos) -> {
ShipDate:key.@StatusDate
}) when $!='' otherwise {})
}
})
}
}
})
}
如果某个值不存在,则无法映射该值,因此必须使用“when/other”来验证元素的存在。尝试以下操作:
这应该能解决你的问题。(除非没有/另有规定)或(当/另有规定),可根据您的要求使用任何组合。如果在大多数情况下存在发货日期,则建议使用“除非没有”,否则将“除非没有”替换为“何时”
尝试以下方法:
- 使用“SkipNullOn”%output application/xml SkipNullOn=“everywhere”
- 您可以使用如下字段所示的when条件:“null”when
payload.yourField==null,否则payload.yourField
下面给出了Mule消息对象的结构定义
消息
入站属性
出境财产
有效载荷
变量
流量变量
会话变量
附件
异常有效负载
当流的连接器(侦听端口)接收到有效负载时,它被称为入站端点。
在流中,我们将一个连接件放置在中间,并发送一个称为输出端点的有效载荷。在这里,发送到Http出站流的所有出站属性都成为该流中的入站属性
有关详细说明,请参见下面的链接
.请提供输入和输出数据示例。它给出了什么错误?它是否
无法将:null强制为:数组(com.mulesoft.weave.mule.exception.WeaveExecutionException)。消息负载的类型是:LinkedList
?您好,Davo,在尝试了这段代码后,它仍然通过提供输入给出了错误
好的,我用一个空的命令行构建了脚本,如下所示:带有内联关闭标记。我提供的输入还有其他选项吗?是的,它正在工作。。但是,如果有人有不同的要求,它也会随之改变。感谢Davo+1的“如果某个值不存在,则无法映射该值”,当您在字段名中输入错误时,您将收到以下错误消息:无法将:null强制为…
Hi J,此代码看起来与用于单个迭代的代码一样好,但是对于OrderLine的迭代元素,它的代码失败。对于输入,它的代码失败