【问题标题】:How to transform SOAP to JSON array in wso2 ESB using script mediator?如何使用脚本中介将 SOAP 转换为 wso2 ESB 中的 JSON 数组?
【发布时间】:2021-05-06 12:48:30
【问题描述】:

我正在尝试将来自我们客户的soap请求转换为我们使用wso2脚本中介的REST服务。

输入(SOAP):

<tran:Request xmlns:tran="http://schemas.demo.com/tran.xsd" xmlns:sub="http://schemas.demo.com/admin.xsd" ...>
    <tran:Specific>
        <tran:Subject>
            <sub:Transaction>
                <sub:postingIndicator>false</sub:postingIndicator>
                <sub:referenceId>23645723</sub:referenceId>
                <sub:entries>
                    <sub:entry>
                        <sub:accountNumber>AC0123456</sub:accountNumber>
                        <sub:credit>true</sub:credit>
                        <sub:amount>
                            <sub:amountValue>20</sub:amountValue>
                            <sub:currencySymbol>USD</sub:currencySymbol>                                
                        </sub:amount>
                    </sub:entry>
                    <sub:entry>
                        <sub:accountId>AC987654</sub:accountId>
                        <sub:credit>false</sub:credit>
                        <sub:amount>
                            <sub:amountValue>20</sub:amountValue>
                            <sub:currencySymbol>USD</sub:currencySymbol>                                
                        </sub:amount>
                    </sub:entry>
                    <sub:entry> .....
                </sub:entries>
            </sub:Transaction>
        </tran:Subject>
    </tran:Specific>
</tran:Request>

预期输出(JSON):

{
    "indicator": false,
    "reference": 23645723,
    "postingEntries": [
        {
            "accountId": "AC0123456",
            "credit": "true",
            "amount": {
                "value": "20",
                "currency": "USD"
            }               
        },
        {
            "accountId": "AC987654",
            "credit": "false",
            "amount": {
                "value": "20",
                "currency": "USD"
            }               
        },
        .....
    ]
}

到目前为止,我能够将“非数组”xml 元素映射到 JSON,但停留在迭代 entries“xml 数组”。这是我现在拥有的脚本中介。

<sequence name="soap-to-rest" xmlns="http://ws.apache.org/ns/synapse">
    <script language="js">
        <![CDATA[
            var log = mc.getServiceLog();
            var payload = mc.getPayloadXML();
            log.info(payload);

            var adminns = new Namespace('http://schemas.demo.com/admin.xsd');

            // How to iterate the <sub:entries> and fill this array up? <===========
            var postingEntries[];

            mc.setPayloadJSON(
                {
                    "indicator": mc.getPayloadXML()..adminns::postingIndicator.toString(),
                    "reference": mc.getPayloadXML()..adminns::referenceId.toString(),
                    "postingEntries": postingEntries
                }
            );
        ]]>
    </script>
</sequence>

如何在mc.setPayloadJSON() 中设置postingEntries json 数组?

【问题讨论】:

    标签: wso2 wso2esb wso2ei synapse


    【解决方案1】:

    在您的用例中使用数据映射器调解器会更容易。使用集成工作室,您可以轻松映射输入和输出。请参阅文档 [1]。

    [1]-https://ei.docs.wso2.com/en/7.2.0/micro-integrator/references/mediators/data-Mapper-Mediator/

    【讨论】:

      猜你喜欢
      • 2012-08-31
      • 1970-01-01
      • 2016-12-26
      • 1970-01-01
      • 2012-08-08
      • 2017-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多