【发布时间】:2014-05-28 14:36:35
【问题描述】:
与客户端的合约是在 rest web 服务调用中发送JSON 有效载荷。在我的Mule 流程中,我处理XML 并在进行Web 服务调用之前,使用
JSON
<json:xml-to-json-transformer>
除非出现几个问题,否则它工作得很好。其中之一是在XSD 中,一个元素是用maxOccurs="5" 定义的,但大多数时候这个元素在XML 中只出现1 次。所以问题是:
- 当一个数组有多个条目时,它被正确序列化
- 当数组只有 1 个条目时,它不是作为数组序列化,而是作为单个字典序列化。
所以,对于这个 XML:
<team>
<employee>
<name>Joe</name>
<surname>Bloggs</surname>
</employee>
<employee>
<name>Jane</name>
<surname>Doe</surname>
</employee>
</team>
JSON 是:
{
team:{
employee:[
{
name:'Joe',
surname:'Bloggs'
},
{
name:'Jane',
surname:'Doe'
}
]
}
}
但对于这个XML
<team>
<employee>
<name>Joe</name>
<surname>Bloggs</surname>
</employee>
</team>
产生的JSON是:
{
team:{
employee:{
name:'Joe',
surname:'Bloggs'
}
}
}
这里的问题是客户期望employee 的值是array(事实并非如此),这违反了合同。
我使用custom-transformer 和Object Mapper 阅读,可能有一种方法可以指定XML 中的哪个单个元素应强制为JSON 中的array 或注入XSD。有什么办法吗?
【问题讨论】: