Mule Dataweaver int数组到xml元素soap

时间:2015-12-17 14:17:41

标签: arrays xml soap mule dataweave

我在MuleESB中将整数数组转换为xml时遇到问题。

所以我有一个名为UsagePoint的对象,其中包含groups=ArrayOfint [_int=[2]]

在我的转换组件Transform Message中,我尝试了以下转换方法,我故意忽略了ns0 namespace

%namespace ns1 http://schemas.microsoft.com/2003/10/Serialization/Arrays
%type groups = :object {class: "xmlinterface.ArrayOfint"}
--    
 ns0#Groups: {
    ns1#int: payload.groups.int as :object
 },

%namespace ns1 http://schemas.microsoft.com/2003/10/Serialization/Arrays
    %type groups = :object {class: "xmlinterface.ArrayOfint"}
    --    
     ns0#Groups: payload.groups map {
        ns1#int: payload.groups.int as :object
     },

%namespace ns1 http://schemas.microsoft.com/2003/10/Serialization/Arrays
--    
  ns0#Groups: {
     ns1#int: payload.groups
  },

并且我在变换器组件之前设置流变量groupint,通过使用以下方法调用payload.getGroups().getInt()获取数组,结果为[2]并且我得到反序列化错误INT32。

%namespace ns1 http://schemas.microsoft.com/2003/10/Serialization/Arrays
--    
  ns0#Groups: {
    ns1#int: flowVars.groupint
  },

但是当我调用payload.getGroups().getInt()[0]以便得到我的整数时,它运行正常。我的问题是数组中的元素可能多于一个元素。所以我想要一个结果说:

  <Groups>
    <int>1</int>
    <int>2</int>
    <int>3</int>
    ...
  </Groups>

而不是只能在生成的xml中包含1个int元素的结果。

我也试过说ns0#Groups: payload.groups。那么我该如何编写一个处理整数数组的Dataweaver表达式呢?

1 个答案:

答案 0 :(得分:0)

尝试

%namespace ns1 http://schemas.microsoft.com/2003/10/Serialization/Arrays
%type groups = :object {class: "xmlinterface.ArrayOfint"}
--    
 ns0#Groups: {
    (payload.groups.int map {ns1#int: $})
 }

https://docs.mulesoft.com/mule-user-guide/v/3.7/dataweave-reference-documentation#dynamic-elements