wso2 - 丰富 WSO2 中的有效负载
问题描述
我有一个以下结构的 JSON 数组。
{"paymentItems": [
{
"amount": "180000",
"code": "28"
},
{
"amount": "396000",
"code": "06"
},
{
"amount": "1460000",
"code": "01"
}
]
}
我正在尝试使用额外的 JSON 值来丰富数组列表中的每个项目。
<foreach expression="//paymentItems" id="1">
<sequence>
<property expression="//paymentItems/amount" name="amount" scope="default" type="STRING"/>
<property expression="//paymentItems" name="body" scope="default" type="STRING"/>
<log>
<property expression="$ctx:amount" name="INIDIVIDUAL_AMOUNT"/>
</log>
<script language="js"><![CDATA[var amount = mc.getProperty('amount'); var naira = amount/100; mc.setProperty("nairaValue", naira);]]></script>
<log>
<property expression="get-property('nairaValue')" name="NAIRA_VAL"/>
</log>
<property expression="get-property('nairaValue')" name="naira" scope="default" type="STRING"/>
<enrich>
<source type="custom" xpath="$ctx:nairaValue"/>
<target action="child" type="body"/>
</enrich>
</sequence>
</foreach>
如您所见,我在 foreach 中处理值,然后使用结果并尝试添加到数组项中,但它不会引发错误并且不会添加值。
解决方案
Foreach 调解器执行以下操作
- 首先克隆原始消息
- 从原始消息中获取一个迭代元素(使用 XPath)
- 通过将迭代元素添加到克隆的信封来创建新的消息上下文
- 针对该新消息上下文执行序列中给出的中介步骤
因为对于每次迭代,我们都在克隆一个新的消息上下文(比如 context2),而原始消息上下文(比如 context1)是一个单独的,我们不能从 context2 丰富到 context1。
这就是您正在经历的行为的原因。
作为一种补救措施,您可以从脚本调解器本身进行迭代并根据需要更改消息。
推荐阅读
- java - 如何从字符串中的 getResourceAsStream 返回路径?
- python - 在 Python 3.4 中安装特定版本的 pandas (0.21.0) 时出现问题
- imagemagick - 使用以百分比给出的 imagemagick 偏移量裁剪图像
- ios - Mac Catalyst 是否支持 UIActivityViewController?
- sql - 如何在cake php的子查询中使用主查询值作为过滤器
- sql - 在 DB2 中用午夜秒四舍五入
- javascript - 如何使用 javascript 读取 .txt 文件?
- java - 向 JSON 结构添加更改
- r - 如何在您定义的函数中使用 Python 模块的函数而不导入超出函数的范围(即:R 具有 package::function)
- java - Spring Boot 控制器测试,空指针异常