политика XMLtoJSON

Вы просматриваете документацию Apigee Edge .
Перейти к документации Apigee X.
info

Что

Эта политика преобразует сообщения из формата расширяемого языка разметки (XML) в формат нотации объектов JavaScript (JSON), предоставляя вам несколько вариантов управления способом преобразования сообщений.

Предполагая, что целью является преобразование ответа в формате XML в ответ в формате JSON, политика будет прикреплена к потоку ответа (например, Response / ProxyEndpoint / PostFlow).

О

В типичном сценарии медиации политика преобразования JSON в XML для входящего потока запросов часто сочетается с политикой преобразования XML в JSON для исходящего потока ответов. Благодаря такому комбинированию политик можно предоставить JSON API для бэкенд-сервисов, изначально поддерживающих только XML.

В сценариях, где API используются различными клиентскими приложениями, которым может потребоваться JSON или XML, формат ответа можно задать динамически, настроив политики преобразования JSON в XML и XML в JSON для условного выполнения. Реализацию этого сценария см. в разделе «Переменные и условия потока» .


Образцы

Подробное обсуждение преобразования JSON в XML см. в статье Преобразование XML в JSON с помощью Apigee: что вам нужно знать .

Преобразование ответа

<XMLToJSON name="ConvertToJSON">
  <Options>
  </Options>
  <OutputVariable>response</OutputVariable>
  <Source>response</Source>
</XMLToJSON>

Эта конфигурация, минимальная конфигурация, необходимая для преобразования XML в JSON, принимает ответное сообщение в формате XML в качестве источника, а затем создаёт сообщение в формате JSON, которое помещается в выходную переменную response . Edge автоматически использует содержимое этой переменной в качестве сообщения для следующего этапа обработки.


Ссылка на элемент

Ниже приведены элементы и атрибуты, которые можно настроить в этой политике.

<XMLToJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">
    <DisplayName>XML to JSON 1</DisplayName>
    <Source>response</Source>
    <OutputVariable>response</OutputVariable>
    <Options>
        <RecognizeNumber>true</RecognizeNumber>
        <RecognizeBoolean>true</RecognizeBoolean>
        <RecognizeNull>true</RecognizeNull>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
        <NamespaceSeparator>***</NamespaceSeparator>
        <TextAlwaysAsProperty>true</TextAlwaysAsProperty>
        <TextNodeName>TEXT</TextNodeName>
        <AttributeBlockName>FOO_BLOCK</AttributeBlockName>
        <AttributePrefix>BAR_</AttributePrefix>
        <OutputPrefix>PREFIX_</OutputPrefix>
        <OutputSuffix>_SUFFIX</OutputSuffix>
        <StripLevels>2</StripLevels>
        <TreatAsArray>
            <Path unwrap="true">teachers/teacher/studentnames/name</Path>
        </TreatAsArray>
    </Options>
    <!-- Use Options or Format, not both -->
    <Format>yahoo</Format>
</XMLToJSON>

Атрибуты <XMLtoJSON>

<XMLtoJSON async="false" continueOnError="false" enabled="true" name="XML-to-JSON-1">

В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:

Атрибут Описание По умолчанию Присутствие
name

Внутреннее имя политики. Значение атрибута name может содержать буквы, цифры, пробелы, дефисы, подчеркивания и точки. Это значение не может превышать 255 символов.

При необходимости используйте элемент <DisplayName> , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

Н/Д Необходимый
continueOnError

Установите значение false , чтобы возвращать ошибку в случае сбоя политики. Это ожидаемое поведение для большинства политик.

Установите значение true , чтобы выполнение потока продолжалось даже после сбоя политики.

ЛОЖЬ Необязательный
enabled

Установите значение true , чтобы обеспечить соблюдение политики.

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

истинный Необязательный
async

Этот атрибут устарел.

ЛОЖЬ Устарело

Элемент <DisplayName>

Используйте в дополнение к атрибуту name , чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.

<DisplayName>Policy Display Name</DisplayName>
По умолчанию

Н/Д

Если вы опустите этот элемент, будет использовано значение атрибута name политики.

Присутствие Необязательный
Тип Нить

Элемент <Источник>

Переменная, запрос или ответ, содержащая XML-сообщение, которое вы хотите преобразовать в JSON.

Заголовок HTTP Content-type исходного сообщения должен быть установлен на application/xml , в противном случае политика не применяется.

Если <Source> не определен, то он рассматривается как сообщение (которое преобразуется в запрос, если политика прикреплена к потоку запросов, или в ответ, если политика прикреплена к потоку ответов).

Если исходная переменная не может быть разрешена или разрешается в тип, не являющийся сообщением, политика выдает ошибку.

<Source>response</Source>
По умолчанию запрос или ответ, определяется тем, где политика добавлена ​​в поток прокси API
Присутствие Необязательный
Тип сообщение

элемент <OutputVariable>

Сохраняет результат преобразования XML в формат JSON. Обычно это то же значение, что и у источника, то есть, как правило, XML-ответ преобразуется в JSON-ответ.

Полезная нагрузка XML-сообщения анализируется и преобразуется в JSON, а HTTP-заголовок Content-type сообщения в формате XML устанавливается равным application/json .

Если OutputVariable не указан, source считается OutputVariable . Например, если source является response , то OutputVariable по умолчанию принимает значение response .

<OutputVariable>response</OutputVariable>
По умолчанию запрос или ответ, определяется тем, где политика добавлена ​​в поток прокси API
Присутствие Этот элемент является обязательным, если переменная, определенная в элементе <Source> , имеет строковый тип.
Тип сообщение

<Параметры>

Параметры позволяют управлять преобразованием из XML в JSON. Используйте либо группу <Options> , которая позволяет добавлять конкретные параметры преобразования, либо элемент <Format> , который позволяет ссылаться на шаблон предопределённых параметров. Нельзя использовать одновременно <Options> и <Format> .

<Options> обязательны, если <Format> не используется.

Элемент <Options>/<RecognizeNumber>

Если это правда, то числовые поля в полезной нагрузке XML сохраняют свой исходный формат.

<RecognizeNumber>true</RecognizeNumber>

Рассмотрим следующий пример XML:

<a>
  <b>100</b>
  <c>value</c>
</a>

Если true , преобразуется в:

{
    "a": {
        "b": 100,
        "c": "value"
    }
}

Если false , преобразуется в:

{
    "a": {
        "b": "100",
        "c": "value"
    }
}
По умолчанию ЛОЖЬ
Присутствие Необязательный
Тип Булевое значение

Элемент <Options>/<RecognizeBoolean>

Позволяет преобразованию сохранять логические значения true/false, а не превращать значения в строки.

<RecognizeBoolean>true</RecognizeBoolean>

Для следующего примера XML:

<a>
  <b>true</b>
  <c>value</c>
</a>

Если true , преобразуется в:

{
    "a": {
        "b": true,
        "c": "value"
    }
}

Если false , преобразуется в:

{
    "a": {
        "b": "true",
        "c": "value"
    }
}
По умолчанию ЛОЖЬ
Присутствие Необязательный
Тип Булевое значение

Элемент <Options>/<RecognizeNull>

Позволяет преобразовывать пустые значения в нулевые значения.

<RecognizeNull>true</RecognizeNull>

Для следующего XML:

<a>
  <b></b>
  <c>value</c>
</a>

Если true , преобразуется в:

{
  "a": {
    "b": null,
    "c": "value"
  }
}

Если false , преобразуется в:

{
  "a": {
    "b": {},
    "c": "value"
  }
}
По умолчанию ЛОЖЬ
Присутствие Необязательный
Тип Булевое значение

Элемент <Options>/<NullValue>

Указывает значение, в которое следует преобразовать распознанные значения NULL в исходном сообщении. По умолчанию значение равно null . Этот параметр действует только в том случае, если RecognizeNull имеет значение true.

<NullValue>not-present</NullValue>

По умолчанию null
Присутствие Необязательный
Тип Нить

<Параметры>/<ИмяБлокаПространстваИмен>
<Параметры>/<ИмяУзлаПространстваИменПоУмолчанию>
Элементы <Options>/<NamespaceSeparator>

Используйте эти элементы вместе.

<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>&</DefaultNamespaceNodeName>
<NamespaceSeparator>***</NamespaceSeparator>

Рассмотрим следующий пример XML:

<a xmlns="http://ns.com" xmlns:ns1="http://ns1.com">
  <ns1:b>value</ns1:b>
</a>

Если NamespaceSeparator не указан, генерируется следующая структура JSON:

{
    "a": {
        "b": "value"
    }
}

Если элементы NamespaceBlockName , DefaultNamespaceNodeName и NamespaceSeparator указаны как #namespaces , & , и *** соответственно, то генерируется следующая структура JSON:

{
    "a": {
        "#namespaces": {
            "&": "http://ns.com",
            "ns1": "http://ns1.com"
        },
        "ns1***b": "value"
    }
}
По умолчанию См. примеры выше.
Присутствие Необязательный
Однако если вы укажете <NamespaceBlockName> , вы также должны указать два других элемента.
Тип Струны

<Параметры>/<TextAlwaysAsProperty>
Элементы <Options>/<TextNodeName>

Используйте эти элементы вместе.

Если установлено true , содержимое элемента XML преобразуется в строковое свойство.

<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<TextNodeName>TEXT</TextNodeName>

Для следующего XML:

<a>
  <b>value1</b>
  <c>value2<d>value3</d>value4</c>
</a>

Если TextAlwaysAsProperty имеет значение true и TextNodeName указано как TEXT , генерируется следующая структура JSON:

{
  "a": {
    "b": {
      "TEXT": "value1"
    },
    "c": {
      "TEXT": [
        "value2",
        "value4"
        ],
        "d": {
          "TEXT": "value3"
        }
      }
    }
}

Если TextAlwaysAsProperty имеет значение false , а TextNodeName указано как TEXT , генерируется следующая структура JSON:

{
  "a": {
    "b": "value1",
    "c": {
      "TEXT": [
        "value2",
        "value4"
      ],
      {
        "d": "value3",
      }
    }
}
По умолчанию <TextAlwaysAsProperty> : ложь
<TextNodeName> : Н/Д
Присутствие Необязательный
Тип <TextAlwaysAsProperty> : логическое значение
<TextNodeName> : строка

<Параметры>/<ИмяАтрибутБлока>
Элементы <Options>/<AttributePrefix>

Используйте эти элементы вместе.

Позволяет группировать значения в блок JSON и добавлять префиксы к именам атрибутов.

<AttributeBlockName>FOO_BLOCK</AttributeBlockName>
<AttributePrefix>BAR_</AttributePrefix>

Рассмотрим следующий пример XML:

<a attrib1="value1" attrib2="value2"/>

Если оба атрибута ( AttributeBlockName и AttributePrefix ) указаны так, как определено в примере XML в JSON, генерируется следующая структура JSON:

{
  "a": {
    "FOO_BLOCK": {
      "BAR_attrib1": "value1",
      "BAR_attrib2": "value2"
    }
  }
}

Если указано только AttributeBlockName , генерируется следующая структура JSON:

{
    "a": {
        "FOO_BLOCK": {
            "attrib1": "value1",
            "attrib2": "value2"
        }
    }
}

Если указан только AttributePrefix , генерируется следующая структура JSON:

{
    "a": {
        "BAR_attrib1": "value1",
        "BAR_attrib2": "value2"
    }
}

Если ни один из параметров не указан, генерируется следующая структура JSON:

{
    "a": {
        "attrib1": "value1",
        "attrib2": "value2"
    }
}
По умолчанию См. примеры выше.
Присутствие Необязательный
Тип Нить

<Параметры>/<ПрефиксВывода>
Элементы <Options>/<OutputSuffix>

Используйте эти элементы вместе.

<OutputPrefix>PREFIX_</OutputPrefix>
<OutputSuffix>_SUFFIX</OutputSuffix>

Рассмотрим следующий пример XML:

<a>value</a>

Если оба атрибута ( OutputPrefix и OutputSuffix ) указаны так, как определено в примере XML в JSON, генерируется следующая структура JSON:

PREFIX_{
    "a": "value"
}_SUFFIX

Если указан только OutputPrefix , генерируется следующая структура JSON:

PREFIX_{
  "a" : "value"
}

Если указан только OutputSuffix , генерируется следующая структура JSON:

{
  "a" : "value"
}_SUFFIX

Если не указан ни OutputPrefix , ни OutputSuffix , генерируется следующая структура JSON:

{
    "a": "value"
}
По умолчанию См. примеры выше.
Присутствие Необязательный
Тип Нить

Элемент <Options>/<StripLevels>

<Options>
    <StripLevels>4</StripLevels>
</Options>

Иногда полезные данные XML, такие как SOAP, содержат много родительских уровней, которые не следует включать в преобразованный JSON. Вот пример ответа SOAP, содержащего много уровней:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/Schemata-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <soap:Body>
      <GetCityWeatherByZIPResponse xmlns="http://ws.cdyne.com/WeatherWS/">
          <GetCityWeatherByZIPResult>
              <State>CO</State>
              <City>Denver</City>
              <Description>Sunny</Description>
              <Temperature>62</Temperature>
          </GetCityWeatherByZIPResult>
      </GetCityWeatherByZIPResponse>
  </soap:Body>
</soap:Envelope>

До уровня «Штат», «Город», «Описание» и «Температура» нужно пройти 4 уровня. Без использования <StripLevels> преобразованный ответ JSON будет выглядеть так:

{
   "Envelope" : {
      "Body" : {
         "GetCityWeatherByZIPResponse" : {
            "GetCityWeatherByZIPResult" : {
               "State" : "CO",
               "City" : "Denver",
               "Description" : "Sunny",
               "Temperature" : "62"
            }
         }
      }
   }
}

Если вы хотите удалить первые 4 уровня из ответа JSON, вам нужно установить <StripLevels>4</StripLevels> , что даст вам следующий JSON:

{
  "State" : "CO",
  "City" : "Denver",
  "Description" : "Sunny",
  "Temperature" : "62"
}

Вы можете удалить уровни до первого элемента, содержащего несколько дочерних элементов. Что это значит? Давайте рассмотрим более сложный пример JSON:

{
   "Envelope" : {
      "Body" : {
         "GetCityForecastByZIPResponse" : {
            "GetCityForecastByZIPResult" : {
               "ResponseText" : "City Found",
               "ForecastResult" : {
                  "Forecast" : [
                     {
                        "ProbabilityOfPrecipiation" : {
                           "Nighttime" : "00",
                           "Daytime" : 10
                        }  ...

Уровень 3 в этом примере — GetCityForecastByZIPResponse , у которого всего один дочерний элемент. Таким образом, если использовать <StripLevels>3</StripLevels> (удалив первые три уровня), JSON будет выглядеть так:

{
   "GetCityForecastByZIPResult" : {
      "ResponseText" : "City Found",
      "ForecastResult" : {
         "Forecast" : [
            {
               "ProbabilityOfPrecipiation" : {
                  "Nighttime" : "00",
                  "Daytime" : 10
               }  ...

Обратите внимание, что у GetCityForecastByZIPResult несколько дочерних элементов. Поскольку это первый элемент, содержащий несколько дочерних элементов, вы можете удалить этот последний уровень с помощью <StripLevels>4</StripLevels> , что даст следующий JSON-код:

{
   "ResponseText" : "City Found",
   "ForecastResult" : {
      "Forecast" : [
         {
            "ProbabilityOfPrecipiation" : {
               "Nighttime" : "00",
               "Daytime" : 10
            }  ...

Поскольку уровень 4 — первый уровень, содержащий несколько дочерних элементов, вы не можете удалить элементы ниже этого уровня. Если вы установите уровень удаления 5, 6, 7 и т. д., вы продолжите получать ответ, указанный выше.

По умолчанию 0 (без зачистки уровня)
Присутствие Необязательный
Тип Целое число

Элемент <Options>/<TreatAsArray>/<Path>

<Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

Эта комбинация элементов позволяет гарантировать, что значения из XML-документа будут помещены в массив JSON. Это полезно, например, когда количество дочерних элементов может варьироваться (от одного до нескольких), и вы хотите гарантировать, что значения всегда находятся в массиве. Это помогает сохранить стабильность кода, поскольку вы можете получать данные из массива каждый раз одним и тем же способом. Например: $.teachers.teacher.studentnames[0] возвращает первое значение имени учащегося в массиве независимо от количества значений в массиве.

Давайте сделаем шаг назад и рассмотрим поведение XML в JSON по умолчанию, а затем рассмотрим, как управлять выводом с помощью <TreatAsArray>/<Path> .

Когда XML-документ содержит элемент с несколькими дочерними значениями (обычно на основе схемы, где maxOccurs='unbounded' элемента), политика XML в JSON автоматически помещает эти значения в массив. Например, следующий XML-блок

<teacher>
    <name>teacherA</name>
    <studentnames>
        <name>student1</name>
        <name>student2</name>
    </studentnames>
</teacher>

...автоматически преобразуется в следующий JSON без специальной настройки политики:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}
           }
      }
}

Обратите внимание, что имена двух студентов помещены в массив.

Однако если в XML-документе указан только один студент, политика преобразования XML в JSON автоматически обрабатывает значение как одну строку, а не как массив строк, как показано в следующем примере:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : "student1"
              }
          }
      }
}

В предыдущих примерах похожие данные преобразовывались по-разному: один раз в массив, другой — в одну строку. Здесь элемент <TreatAsArray>/<Path> позволяет управлять выводом. Например, можно убедиться, что имена студентов всегда помещаются в массив, даже если есть только одно значение. Это можно настроить, указав путь к элементу, значения которого нужно поместить в массив, например:

<Options>
    <TreatAsArray>
        <Path>teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>

Приведенная выше конфигурация запишет JSON следующим образом:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : ["student1"]
              }
            ]
          }
      }
}

Обратите внимание, что имя student1 теперь находится в массиве. Теперь, независимо от того, один ли у вас ученик или несколько, вы можете извлечь их из массива JSON в коде, используя следующий JSONPath: $.teachers.teacher.studentnames.name[0]

Элемент <Path> также имеет атрибут unwrap , который поясняется в следующем разделе.

По умолчанию NA
Присутствие Необязательный
Тип Нить

Атрибуты

 <Options>
    <TreatAsArray>
        <Path unwrap="true">teachers/teacher/studentnames/name</Path>
    </TreatAsArray>
</Options>
Атрибут Описание Присутствие Тип
разворачивать

По умолчанию: ложно

Удаляет элемент из выходных данных JSON. Используйте это для оптимизации или выравнивания («разворачивания») JSON, что также сокращает JSONPath, необходимый для извлечения значений. Например, вместо $.teachers.teacher.studentnames.name[*] можно выравнивать JSON и использовать $.teachers.studentnames[*] .

Вот пример JSON:

{
  "teachers" : {
      "teacher" : {
          "name" : "teacherA",
          "studentnames" : {
              "name" : [
                 "student1",
                 "student2"
              ]}...

В этом примере можно утверждать, что элементы teacher и name не нужны. Поэтому вы можете удалить их или развернуть. Вот как настроить элемент <Path> для этого:

<TreatAsArray>
    <Path unwrap="true">teachers/teacher</Path>
    <Path unwrap="true">teachers/teacher/studentnames/name</Path>
</TreatAsArray>

Атрибут unwrap установлен в значение true, и указаны пути к элементам для разворачивания. Вывод JSON теперь будет выглядеть следующим образом:

{
  "teachers" : [{
      "name" : "teacherA",
      "studentnames" : ["student1","student2"]
      }]...

Обратите внимание: поскольку элемент <Path> находится в элементе <TreatAsArray> , оба элемента в Path будут рассматриваться как массивы в выходных данных JSON.

Необязательный Булевое значение

Дополнительные примеры и пошаговое руководство по функциям см. в статье сообщества Apigee: Учебное пособие сообщества: параметр TreatAsArray в политике XML в JSON .

<Формат>

Формат позволяет управлять преобразованием XML в JSON. Введите имя предопределённого шаблона, содержащего определённую комбинацию элементов Options, описанных в этом разделе. Предопределённые форматы включают: xml.com , yahoo , google , badgerFish .

Используйте либо элемент <Format> , либо группу <Options> . Нельзя использовать одновременно <Format> и <Options> .

Ниже приведены определения форматов каждого предопределенного шаблона.

xml.com

<RecognizeNull>true</RecognizeNull>
<TextNodeName>#text</TextNodeName>
<AttributePrefix>@</AttributePrefix>

yahoo

<RecognizeNumber>true</RecognizeNumber>
<TextNodeName>content</TextNodeName>

Google

<TextNodeName>$t</TextNodeName>
<NamespaceSeparator>$</NamespaceSeparator>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>

барсукРыба

<TextNodeName>$</TextNodeName>
<TextAlwaysAsProperty>true</TextAlwaysAsProperty>
<AttributePrefix>@</AttributePrefix>
<NamespaceSeparator>:</NamespaceSeparator>
<NamespaceBlockName>@xmlns</NamespaceBlockName>
<DefaultNamespaceNodeName>$</DefaultNamespaceNodeName>

Синтаксис элемента:

<Format>yahoo</Format>
По умолчанию Введите название доступного формата:
xml.com , yahoo , google , badgerFish
Присутствие Требуется, если <Options> не используется.
Тип Нить

Схемы


Ссылка на ошибку

В этом разделе описаны коды ошибок и сообщения об ошибках, которые возвращаются, а также переменные ошибок, которые устанавливаются Edge, когда эта политика вызывает ошибку. Эту информацию важно знать, если вы разрабатываете правила обработки ошибок. Дополнительные сведения см. в разделах Что нужно знать об ошибках политики и Обработка ошибок .

Ошибки выполнения

Эти ошибки могут возникать при выполнении политики.

Код неисправности Статус HTTP Причина Исправить
steps.xmltojson.ExecutionFailed 500 Эта ошибка возникает, когда входные полезные данные (XML) пусты или входной XML недействителен или имеет неверный формат.
steps.xmltojson.InCompatibleType 500 Эта ошибка возникает, если тип переменной, определенной в элементе <Source> и элементе <OutputVariable> , не совпадает. Обязательно, чтобы тип переменных, содержащихся в элементе <Source> и элементе <OutputVariable> , совпадал.
steps.xmltojson.InvalidSourceType 500 Эта ошибка возникает, если тип переменной, используемой для определения элемента <Source> недействителен. Допустимыми типами переменных являются сообщение и строка.
steps.xmltojson.OutputVariableIsNotAvailable 500 Эта ошибка возникает, если переменная, указанная в элементе <Source> политики XML для JSON, имеет строковый тип, а элемент <OutputVariable> не определен. Элемент <OutputVariable> является обязательным, если переменная, определенная в элементе <Source> , имеет строковый тип.
steps.xmltojson.SourceUnavailable 500 Эта ошибка возникает, если переменная сообщения , указанная в элементе <Source> политики XML в JSON, имеет одно из следующих значений:
  • вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
  • не может быть решено (не определено)

Ошибки развертывания

Эти ошибки могут возникнуть при развертывании прокси-сервера, содержащего эту политику.

Название ошибки Причина Исправить
EitherOptionOrFormat Если один из элементов <Options> или <Format> не объявлен в политике XML to JSON, развертывание прокси-сервера API завершается неудачей.
UnknownFormat Если для элемента <Format> в политике XML to JSON определен неизвестный формат, развертывание прокси-сервера API завершается неудачей. Предопределенные форматы включают: xml.com , yahoo , google и badgerFish .

Переменные неисправности

Эти переменные устанавливаются при возникновении ошибки во время выполнения. Дополнительные сведения см. в разделе Что нужно знать об ошибках политики .

Переменные Где Пример
fault.name=" fault_name " fault_name — это имя ошибки, как указано в таблице ошибок времени выполнения выше. Имя неисправности — это последняя часть кода неисправности. fault.name = "SourceUnavailable"
xmltojson. policy_name .failed policy_name — указанное пользователем имя политики, вызвавшей ошибку. xmltojson.XMLtoJSON-1.failed = true

Пример ответа об ошибке

{
  "fault": {
    "faultstring": "XMLToJSON[XMLtoJSON-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.xml2json.SourceUnavailable"
    }
  }
}

Пример правила неисправности

<faultrule name="VariableOfNonMsgType"></faultrule><FaultRule name="XML to JSON Faults">
    <Step>
        <Name>AM-SourceUnavailableMessage</Name>
        <Condition>(fault.name Matches "SourceUnavailable") </Condition>
    </Step>
    <Step>
        <Name>AM-BadXML</Name>
        <Condition>(fault.name = "ExecutionFailed")</Condition>
    </Step>
    <Condition>(xmltojson.XMLtoJSON-1.failed = true) </Condition>
</FaultRule>

Похожие темы

JSON в XML: политика преобразования JSON в XML