【发布时间】:2018-09-05 17:57:29
【问题描述】:
我正在尝试使用 Mule 中的 DataMapper 转换将来自第 3 方调用的响应映射到不同的结构中。
我们从第 3 方收到一个项目数组(除其他外),我想将数组中的单个项目映射到一个对象 (JSON)。我收到请求中项目的标识符,可用作输入参数。
我的问题是,如何根据标识符映射项目的字段?
示例 XML 响应
<account>
<accountNumber>1234567</accountNumber>
<books>
<book>
<id>1</id>
<title>Sample title1</title>
<availableFrom>21-03-16</availableFrom>
</book>
<book>
<id>2</id>
<title>Sample title2</title>
<availableFrom>21-03-16</availableFrom>
</book>
<book>
<id>3</id>
<title>Sample title3</title>
<availableFrom>21-03-16</availableFrom>
</book>
</books>
</account>
需要成为:
{
"person": {
"accountNumber": 1234567,
"selectedBook": {
"id": 1,
"title": "Sample title1"
},
"otherBooks": [
{
"id": 2,
"title": "Sample title2"
},
{
"id": 3,
"title": "Sample title3"
}
]
}
}
所选图书的 ID 保存在 inputArgument.bookId 中。
我可以为每个字段使用 xpath 规则完成映射,但是,我必须在 xpath 中硬编码 bookId。相反,我需要能够将实际 id 替换为提供的(并且在 inputArgument 中可用)。
标题的xpath
/account/books/book[child::id=1]/title
我尝试添加 MEL 来替换 id 和其他各种修复,但似乎没有任何效果。有没有办法替换 bookId 字段。
注意:由于客户端限制,我无法使用DataWeave。
【问题讨论】:
-
你可以尝试为每个到 /account/books/book。然后为每个有效载荷获取每个参数的值。 json 很简单,只需创建一个 POJO,然后在从 for-each 有效负载进行映射后将对象转换为 json 转换器。
-
谢谢拉尔夫。我不太了解“获取每个参数的值” - 你能提供更多信息吗?
-
我的意思是当您使用 foreach 迭代到 /account/books/ 时,您可以获得每本书。在 foreach 中,您可以转换为 json,然后执行 #[payload.id]、#[payload.title] 之类的操作