【问题标题】:WSO2 EI For loop through Json arrayWSO2 EI For循环遍历Json数组
【发布时间】:2019-07-08 03:08:20
【问题描述】:

我有以下请求(我使用的是 WSO2 Enterprise 集成器 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 表达式 不正确。

谢谢

问候,

【问题讨论】:

    标签: wso2 wso2esb wso2dss wso2ei


    【解决方案1】:

    在您的示例中,使用了 Loopback 中介。它将用于将消息移动到输出流(响应路径)。因此,Foreach 调解器拆分消息并将第一条消息发送到响应路径并结束流程。

    您可以准备 XML 有效负载并将其转换为 JSON,使用带有 axis2 范围的 messageType 属性,如下所示。

        <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"
                }
            ]
        }
    }
    

    【讨论】:

    • 这是我获取此 XMLNode 的完整路径(顺便说一下 SOAP 消息)我正在记录这个道具但没有显示 对吗?
    【解决方案2】:

    目前,EI 6.5.0 中的 foreach 中介不支持“json-eval()”表达式。这个feature 将包含在即将发布的版本中。

    作为一种解决方法,您可以在表达式中使用 XPath。您可以使用此博客作为示例。 https://medium.com/@Manuri/wso2-esb-foreach-mediator-example-87f041e2a912

    【讨论】:

    • 感谢您的回复 Arunan,根据我的回复,我的 Xpath 是什么?是不是像 -> //ERROR_RESP/ERROR?ECODE ?
    • //ERROR_RESP/ERROR 就足够了。 docs.wso2.com/display/EI650/…
    • 此功能从 EI 6.6.0 开始提供
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2020-09-18
    • 2015-07-22
    • 2013-08-16
    • 2011-06-11
    • 2013-02-06
    相关资源
    最近更新 更多