WSO2 EI For通过Json数组循环

时间:2019-07-08 03:08:20

标签: wso2 wso2esb wso2dss wso2ei

我有以下要求(我正在使用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表达式 是不正确的。

谢谢

此致

2 个答案:

答案 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