我有以下要求(我正在使用WSO2 Enterprise integrator 6.5.0):
我想在返回客户端的jsonpayload中获得此
<ERROR_RESP>
<ERROR>
<ECODE>ST-VALS-002</ECODE>
<EDESC>Record Not Found for Branch Code-CHO:Currency 1-USD:Currency 2-MN</EDESC>
</ERROR>
<ERROR>
<ECODE>ST-SAVE-024</ECODE>
<EDESC>Failed to Query Data</EDESC>
</ERROR>
</ERROR_RESP>
这是我尝试实现的代码:
<foreach expression="json-eval($.ERROR_RESP.ERROR)">
<sequence>
<payloadFactory media-type="json">
<format>
{
"ErrorCode" : "$1",
"ErrorMessage" : "$2"
}
</format>
<args>
<arg evaluator="json" expression="$.ECODE"/>
<arg evaluator="json" expression="$.EDESC"/>
</args>
</payloadFactory>
<log level="full">
<property name="MESSAGE" value="ENDLOOP"/>
</log>
<loopback/>
</sequence>
</foreach>
enter code here
我进行了一些搜索,但没有任何效果,我认为 foreach表达式 是不正确的。
谢谢
此致
答案 0 :(得分:3)
在您的示例中,使用了环回调解器。它将用于将消息移至流出(响应路径)。因此,Foreach中介器将邮件拆分,然后将第一条邮件发送到响应路径并结束流程。
您可以使用具有axis2范围的messageType属性来准备XML有效负载并将其转换为JSON,如下所示。
<foreach expression="//ERROR">
<sequence>
<payloadFactory media-type="xml">
<format>
<ERROR xmlns="">
<ErrorCode>$1</ErrorCode>
<ErrorMessage>$2</ErrorMessage>
</ERROR>
</format>
<args>
<arg evaluator="xml" expression="//ECODE/text()"/>
<arg evaluator="xml" expression="//EDESC/text()"/>
</args>
</payloadFactory>
</sequence>
</foreach>
<property name="messageType" scope="axis2" value="application/json"/>
最后一条消息将是这样的:
{
"ERROR_RESP": {
"ERROR": [
{
"ErrorCode": "ST-VALS-002",
"ErrorMessage": "Record Not Found for Branch Code-CHO:Currency 1-USD:Currency 2-MN"
},
{
"ErrorCode": "ST-SAVE-024",
"ErrorMessage": "Failed to Query Data"
}
]
}
}
答案 1 :(得分:2)
目前,EI 6.5.0中的foreach介体不支持“ json-eval()”表达式。此feature将包含在即将发布的版本中。
作为一种解决方法,可以在表达式内使用XPath。您可以使用此博客作为示例。 https://medium.com/@Manuri/wso2-esb-foreach-mediator-example-87f041e2a912