Проблема приложений логики Azure с жидкой трансформацией SOAP XML - PullRequest
0 голосов
/ 02 октября 2019

Я использую приложения логики 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": ""
}

1 Ответ

0 голосов
/ 01 ноября 2019

Кажется, что у жидкостей нет хорошей поддержки для того же вложенного имени тега, вместо этого мы можем использовать xslt для работы с XML и затем преобразовать его в json, который мы хотим. Но для нас лучше улучшить формат ресурса xml, чтобы избежать вложенного имени тега.

...