【发布时间】: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>
在上述情况下,对于<fcub:Detbs-Jrnl-Txn-Detail>,我们有两组数据,序列号为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 来实现这一目标。 谢谢 坦顿
【问题讨论】: