【问题标题】:How to handle multiple data for a single node in WSO2 EI?如何在 WSO2 EI 中处理单个节点的多个数据?
【发布时间】:2021-10-16 09:34:02
【问题描述】:

我目前正在尝试使用 WSO2 EI 从 SOAP 端点创建 REST API。 源系统以 JSON 格式发送数据,我们在内部将其转换为 xml 并将其发送到目标系统。 我们在这里面临的问题是当有多个数据(数组)必须发送到单个节点时,我们无法实现。如果可能,请让我们知道应该使用 EI 中的哪个调解器以及示例。

示例 SOAP 消息

<fcub:Detbs-Jrnl-Txn-Detail>
                  <fcub:SERIAL_NO>1</fcub:SERIAL_NO>
                  <fcub:DR_CR>D</fcub:DR_CR>
                  <fcub:BRANCH_CODE>001</fcub:BRANCH_CODE>
                  <fcub:CCY>EUR</fcub:CCY>
                  <fcub:AMOUNT>20</fcub:AMOUNT>
                  <fcub:TXN_CODE>TOP</fcub:TXN_CODE>
                  <fcub:LCY_AMOUNT>20</fcub:LCY_AMOUNT>
                  <fcub:ADDL_TEXT>test Mjrnl</fcub:ADDL_TEXT>
                  <fcub:ACCOUNT>001000032027</fcub:ACCOUNT>
</fcub:Detbs-Jrnl-Txn-Detail>
<fcub:Detbs-Jrnl-Txn-Detail>
                  <fcub:SERIAL_NO>2</fcub:SERIAL_NO>
                  <fcub:DR_CR>C</fcub:DR_CR>
                  <fcub:BRANCH_CODE>001</fcub:BRANCH_CODE>
                  <fcub:CCY>EUR</fcub:CCY>
                  <fcub:AMOUNT>20</fcub:AMOUNT>
                  <fcub:TXN_CODE>TOP</fcub:TXN_CODE>
                  <fcub:INSTRUMENT_NO></fcub:INSTRUMENT_NO>
                  <fcub:LCY_AMOUNT>20</fcub:LCY_AMOUNT>
                  <fcub:ADDL_TEXT>test Mjrnl</fcub:ADDL_TEXT>
                  <fcub:ACCOUNT>110000100</fcub:ACCOUNT>
</fcub:Detbs-Jrnl-Txn-Detail>

在上述情况下,对于&lt;fcub:Detbs-Jrnl-Txn-Detail&gt;,我们有两组数据,序列号为1,序列号为2。

相应的 JSON 消息将是

{
  "CREATEMJRNLBOOK_IOPK_REQ": {
    "FCUBS_HEADER": {
      "SOURCE": "SAP_CONCUR",
      "UBSCOMP": "FCUBS",
      "MSGID": "TEST1234",
      "USERID": "PARAMUSER3",
      "ENTITY": "ENTITY_ID2",
      "BRANCH": "001",
      "SERVICE": "FCUBSDEService",
      "OPERATION": "CreateMjrnlbook"
    },
    "FCUBS_BODY": {
      "Detbs-Jrnl-Txn-Master-Full": {
        "VALUE_DATE": "2021-07-28",
        "BRANCH_CODE": "001",
        "Detbs-Jrnl-Txn-Detail": [
          {
            "SERIAL_NO": 1,
            "DR_CR": "D",
            "BRANCH_CODE": "001",
            "CCY": "EUR",
            "AMOUNT": 20,
            "TXN_CODE": "TOP",
            "INSTRUMENT_NO": 0,
            "LCY_AMOUNT": 20,
            "ADDL_TEXT": "test Mjrnl",
            "ACCOUNT": "001000032027"
          },
          {
            "SERIAL_NO": 2,
            "DR_CR": "C",
            "BRANCH_CODE": "001",
            "CCY": "EUR",
            "AMOUNT": 20,
            "TXN_CODE": "TOP",
            "INSTRUMENT_NO": 0,
            "LCY_AMOUNT": 20,
            "ADDL_TEXT": "test Mjrnl",
            "ACCOUNT": "001000032027"
          }
        ],
        "Devws-Batch-Master": {
          "BALANCING": "Y"
        }
      }
    }
  }
}

来自EI的Proxy.xml

<?xml version="1.0" encoding="UTF-8"?>
<proxy name="DEService" startOnLoad="true" transports="http https"
    xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <log description="Logger to Check JSON Message from Proxy" level="full"/>
            <header description="SOAPAction" name="SOAPAction" scope="transport" value=""/>
            <property action="remove" name="REST_URL_POSTFIX" scope="axis2"/>
            <payloadFactory description="Build Request Payload" media-type="xml">
                <format>
                    <soapenv:Envelope
                        xmlns:fcub="http://fcubs.ofss.com/service/FCUBSDEService"
                        xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
                        <soapenv:Header/>
                        <soapenv:Body>
                            <fcub:CREATEMJRNLBOOK_IOPK_REQ>
                                <fcub:FCUBS_HEADER>
                                    <fcub:MODULEID>$1</fcub:MODULEID>
                                    <fcub:USERID>$2</fcub:USERID>
                                    <fcub:ACTION>$3</fcub:ACTION>
                                    <fcub:SOURCE_OPERATION>$4</fcub:SOURCE_OPERATION>
                                    <fcub:MSGID>$5</fcub:MSGID>
                                    <fcub:FUNCTIONID>$6</fcub:FUNCTIONID>
                                    <fcub:MSGSTAT>$7</fcub:MSGSTAT>
                                    <fcub:ENTITY>$8</fcub:ENTITY>
                                    <fcub:UBSCOMP>$9</fcub:UBSCOMP>
                                    <fcub:OPERATION>$10</fcub:OPERATION>
                                    <fcub:BRANCH>$11</fcub:BRANCH>
                                    <fcub:MULTITRIPID>$12</fcub:MULTITRIPID>
                                    <fcub:SNAPSHOTID>$13</fcub:SNAPSHOTID>
                                    <fcub:SERVICE>$14</fcub:SERVICE>
                                    <fcub:SOURCE>$15</fcub:SOURCE>
                                    <fcub:PASSWORD>$16</fcub:PASSWORD>
                                    <fcub:CORRELID>$17</fcub:CORRELID>
                                    <fcub:DESTINATION>$18</fcub:DESTINATION>
                                    <fcub:SOURCE_USERID>$19</fcub:SOURCE_USERID>
                                </fcub:FCUBS_HEADER>
                                <fcub:FCUBS_BODY>
                                    <fcub:Detbs-Jrnl-Txn-Master-Full>
                                        <fcub:VALUE_DATE>$20</fcub:VALUE_DATE>
                                        <fcub:BRANCH_CODE>$21</fcub:BRANCH_CODE>
                                        <fcub:Detbs-Jrnl-Txn-Detail>
                                            <fcub:SERIAL_NO>$22</fcub:SERIAL_NO>
                                            <fcub:DR_CR>$23</fcub:DR_CR>
                                            <fcub:BRANCH_CODE>$24</fcub:BRANCH_CODE>
                                            <fcub:CCY>$25</fcub:CCY>
                                            <fcub:AMOUNT>$26</fcub:AMOUNT>
                                            <fcub:TXN_CODE>$27</fcub:TXN_CODE>
                                            <fcub:LCY_AMOUNT>$28</fcub:LCY_AMOUNT>
                                            <fcub:ADDL_TEXT>$29</fcub:ADDL_TEXT>
                                            <fcub:ACCOUNT>$30</fcub:ACCOUNT>
                                        </fcub:Detbs-Jrnl-Txn-Detail>
                                        <fcub:Devws-Batch-Master>
                                            <fcub:BALANCING>$31</fcub:BALANCING>
                                        </fcub:Devws-Batch-Master>
                                    </fcub:Detbs-Jrnl-Txn-Master-Full>
                                </fcub:FCUBS_BODY>
                            </fcub:CREATEMJRNLBOOK_IOPK_REQ>
                        </soapenv:Body>
                    </soapenv:Envelope>
                </format>
                <args>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.MODULEID"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.USERID"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.ACTION"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.SOURCE_OPERATION"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.MSGID"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.FUNCTIONID"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.MSGSTAT"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.ENTITY"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.UBSCOMP"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.OPERATION"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.BRANCH"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.MULTITRIPID"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.SNAPSHOTID"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.SERVICE"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.SOURCE"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.PASSWORD"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.CORRELID"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.DESTINATION"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_HEADER.SOURCE_USERID"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.VALUE_DATE"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.BRANCH_CODE"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.SERIAL_NO"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.DR_CR"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.BRANCH_CODE"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.CCY"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.AMOUNT"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.TXN_CODE"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.LCY_AMOUNT"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.ADDL_TEXT"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Detbs-Jrnl-Txn-Detail.ACCOUNT"/>
                    <arg evaluator="json" expression="$.CREATEMJRNLBOOK_IOPK_REQ.FCUBS_BODY.Detbs-Jrnl-Txn-Master-Full.Devws-Batch-Master.BALANCING"/>
                </args>
            </payloadFactory>
            <property description="messageProperty" name="messageType" scope="axis2" type="STRING" value="application/soap+xml"/>
            <property description="ContentType" name="ContentType" scope="axis2" type="STRING" value="text/xml"/>
            <log description="Logger to check XML Message" level="full"/>
            <send>
                <endpoint key="FCUBSDEService_ADDRESS_EP"/>
            </send>
        </inSequence>
        <outSequence>
            <property description="Convert XML to Payload" name="messageType" scope="axis2" type="STRING" value="application/json"/>
            <log description="Logger to Check Payload Response" level="full"/>
            <send/>
        </outSequence>
        <faultSequence/>
    </target>
</proxy>

请告诉我们如何使用 EI 来实现这一目标。 谢谢 坦顿

【问题讨论】:

    标签: wso2 wso2esb wso2ei


    【解决方案1】:

    为此,您应该使用Iterate mediator,如this documentation 中所述。看看这个XPath example。 但是您所描述的 JSON 示例无效,因为它应该包含数组为 Detbs-Jrnl-Txn-Detail。如果我能看到更多的 msg 上下文会更容易。

    【讨论】:

    • 谢谢 tmoasz。我已经浏览了文档,但它的形式非常简单。我在上面添加了代理服务 xml,但不确定在哪里添加迭代调解器。请请求您的帮助!
    • 好的,现在它更清楚了。首先,您的 JSON 无效。它缺少昏迷,修复此问题后,您将拥有重复的密钥Detbs-Jrnl-Txn-Detail,而不是数组。所以它看起来更像是转换问题,而不是发送多个数据 - 如果是,您可以查看 ForEach MediatorXSLT Mediator
    • 嗨,对不起,我已经更新了 json 请求,使它成为一个数组。来自 EI 的 proxy.xml 也已更新以访问这些。请让我知道是否应该使用 Iterate 或 forEach Mediator。请提供一个例子。
    • @TandonG 我认为ForEach Mediator 应该没问题,看看这个例子:medium.com/@Manuri/…
    • 我尝试使用 ForEach 调解器,但我在 Postman { "Envelope": { "Body": { "Fault": { "faultcode": "ns0:Client", "faultstring": "Cannot find dispatch method for {}jsonObject" } } } } 中收到以下错误,我相信我在 foreach 中使用了错误的表达式。如果我错了,请纠正我。我目前正在使用&lt;foreach expression="//fcub:Detbs-Jrnl-Txn-Detail" xmlns:fcub="http://fcubs.ofss.com/service/FCUBSDEService"&gt; &lt;sequence&gt; before the &lt;payloadFactory &gt;
    猜你喜欢
    • 1970-01-01
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多