我在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
},
并且当我通过使用下面的方法调用payload.getGroups().getInt()
来获取数组,在转换器组件之前设置流变量groupint
时,结果是[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
。那么,如何编写一个处理int数组的Dataweaver表达式呢?
尝试
%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-元素