Я использую приложения логики Azure для интеграции с устаревшим SOAP API. Я хотел бы перевести XML (особенно ответы) во что-то более простое в использовании, например, json.
Обычно я использую пользовательский соединитель в приложениях логики для подключения к новым API. Я пытался создать Custom Connector для этого SOAP, но WSDL содержит рекурсивные ссылки, которые, по-видимому, недопустимы. Я смог создать управляемый API с нашим контейнером APIM, но все еще не мог создать ничего, что позволило бы мне создать пользовательский соединитель. Итак, я перешел к работе с транзакциями индивидуально. Карта преобразования Liquid из XML в json кажется идеальной, но до сих пор у меня ее не получилось, а именно потому, что я не могу понять соглашение об именах для доступа к определенным элементам XML (тем, у которых тот же идентификатор, что и у ихродитель). На данный момент я использую функцию json (xml ()) в качестве обходного пути, но она кажется менее идеальной, чем карта Liquid.
Как вы можете видеть, AgreementId легко доступен через обычные соглашения об именах, ноКажется, я не могу получить доступ ни к одному из дочерних элементов второго узла RequestReportResponse.
Это XML, который я пытаюсь преобразовать:
<SOAP-ENV:Envelope>
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<RequestReportResponse>
<MessageHeader>
<AgreementId>urn:agreementId:</AgreementId>
</MessageHeader>
<RequestReportResponse>
<Extension>csv</Extension>
<FileByteArray>xyzFileBytes</FileByteArray>
<FileName>xyzFileName</FileName>
<StatusCode>200</StatusCode>
<StatusDescription>SUCCESS</StatusDescription>
</RequestReportResponse>
</RequestReportResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Вот карта Liquid IИспользую:
{
"AgreementId": " {{content.Envelope.Body.RequestReportResponse.MessageHeader.AgreementId}}",
"FileByteArray": "{{content.Envelope.Body.RequestReportResponse.RequestReportResponse.FileByteArray}}",
"FileName": "{{content.Envelope.Body.RequestReportResponse.RequestReportResponse.FileName}}",
"StatusCode": "{{content.Envelope.Body.RequestReportResponse.RequestReportResponse.StatusCode}}",
"StatusDescription": "{{content.Envelope.Body.RequestReportResponse.RequestReportResponse.StatusDescription}}"
}
Ожидаемый результат:
{
"AgreementId": "urn:agreementId:",
"FileByteArray": "xyzFileBytes",
"FileName": "xyzFileName",
"StatusCode": "200",
"StatusDescription": "SUCCESS"
}
Фактический результат:
{
"AgreementId": "urn:agreementId:",
"FileByteArray": "",
"FileName": "",
"StatusCode": "",
"StatusDescription": ""
}