Тело набора управления API Azure с жидким шаблоном

У меня есть служба SOAP, в которой мне нужно добавить одно свойство в тело XML перед отправкой запроса на серверную службу.

Мой запрос почтальона следующий:

<?xml version="1.0" encoding="utf-8"?>
<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
  <Body>
    <gprnEnquiry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.somedomain.com">
      <gprn>123456</gprn>
      <registrationstatus>registrationstatus1</registrationstatus>
    </gprnEnquiry>
  </Body>
</Envelope>

Я передаю заголовок Content-Type text / xml

Моя политика для входящего трафика APIM приведена ниже:

    <set-body template="liquid">
        <Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/">
            <Body>
                <gprnEnquiry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.somedomain.com">
                    <gprn>{{body.gprnEnquiry.gprn}}</gprn>
                    <registrationstatus>{{body.gprnEnquiry.registrationstatus}}</registrationstatus>
                    <authKey>{{My-NamedValue}}</authKey>
                </gprnEnquiry>
            </Body>
        </Envelope>
    </set-body>

Включив захват тела запроса и ответа в APIM, я вижу, что значения из запроса поступают, а ответ выходит без значения.

Серверный запрос

<Envelope
    xmlns="http://schemas.xmlsoap.org/soap/envelope/">
    <Body>
        <gprnEnquiry
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xmlns="http://www.somedomain.com">
            <gprn></gprn>
            <registrationstatus></registrationstatus>
            <authKey>xxxxxxxxxxx</authKey>
        </gprnEnquiry>
    </Body>
</Envelope>

У кого-нибудь есть идея, почему значения из исходного запроса не сопоставляются с внутренним запросом?


person Phil Murray    schedule 11.12.2020    source источник


Ответы (1)


ОК, ответ здесь был связан с форматом тела запроса и тем, как политика APIM сопоставляет элементы. Включение узлов ‹? Xml› и Envelope в запрос предотвращает правильное отображение значений в шаблоне Liquid.

Кроме того, APIM не позволяет указать, что конверт находится в теле запроса, например {{envelope.body.gprnEnquiry.gprn}}.

Изменение тела запроса на приведенное ниже, решило проблему:

  <Body>
    <gprnEnquiry xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.somedomain.com">
      <gprn>123456</gprn>
      <registrationstatus></registrationstatus>
    </gprnEnquiry>
  </Body>
person Phil Murray    schedule 11.12.2020