Mule 空节点的Dataweave错误

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: { ((

我已经用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: {
    (($.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的迭代元素,它的代码失败。对于输入,它的代码失败