Устранение ошибок выполнения правил преобразования JSON в XML

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

SourceUnavailable

Код ошибки

steps.json2xml.SourceUnavailable

Тело ответа с ошибкой

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

Пример ошибки

{
    "fault": {
        "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available",
        "detail": {
            "errorcode": "steps.json2xml.SourceUnavailable"
        }
    }
}

Причина

Эта ошибка возникает, если переменная message, указанная в элементе <Source> правила JSON в XML, является:

  • Не в области действия (недоступно в определенном процессе, в котором выполняется правило) или
  • Не удается разрешить (не определено)

Например, эта ошибка возникает, если правило JSON в XML должно выполняться в потоке запроса, но для элемента <Source> задана переменная response, которая не существует в потоке запроса.

диагностика;

  1. Определите правило JSON в XML, в котором произошла ошибка, и название недоступной переменной. Оба этих элемента можно найти в элементе faultstring ответа об ошибке. Например, в следующем теге faultstring название правила – Convert-JSONToXML, а переменная – response:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. В XML-файле правил, который не удалось преобразовать из JSON, убедитесь, что название переменной, заданной в элементе <Source>, совпадает с названием переменной, указанным в строке ошибки (шаг 1 выше). Например, в приведенном ниже правиле преобразования JSON в XML в элементе <Source> задана переменная response, которая соответствует элементу faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
        <DisplayName>Convert-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>response</Source>
    </JSONToXML>
    
  3. Определите, задана ли переменная, используемая в элементе <Source>, и доступна ли она в потоке, в котором выполняется правило JSON в XML.

  4. Если переменная:

    • Не в области действия (недоступно в определенном процессе, в котором выполняется правило) или
    • Не удается разрешить (не определено)

    то это и есть причина ошибки.

    Предположим, что приведенное выше правило JSON to XML должно выполняться в потоке запроса. Напоминаем, что переменная response используется в элементе <Source> политики JSON в XML. Переменная ответа доступна только в потоке ответов.

    Поскольку переменная response не существует в потоке запросов, вы получите код ошибки:

    steps.json2xml.SourceUnavailable
    

Разрешение

Убедитесь, что переменная, заданная в элементе <Source> невыполненного правила JSON в XML, определена и существует в потоке, в котором выполняется правило.

Чтобы исправить приведенный выше пример JSON-правила, можно изменить элемент <Source>, чтобы использовать переменную request, поскольку она существует в потоке запроса:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
  </JSONToXML>

ExecutionFailed

Код ошибки

steps.json2xml.ExecutionFailed

Тело ответа с ошибкой

{
   "fault": {
        "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1",
        "detail": {
            "errorcode": "steps.json2xml.ExecutionFailed"
        }
    }
}

Возможные причины

Возможные причины ошибки:

Cause Описание
Отсутствует входная полезная нагрузка Входная полезная нагрузка (JSON) пуста.
Недопустимый или неправильный ввод Входные данные (JSON), переданные правилу JSON в XML, недействительны или имеют неправильный формат.

Причина: отсутствует входная полезная нагрузка

Эта ошибка возникает, если в правиле преобразования JSON в XML контент (полезная нагрузка) переменной, указанной в элементе <Source>, пуст.

Например, если элемент <Source> в правиле преобразования JSON в XML задан как переменная request или response и должен содержать полезную нагрузку JSON, но полезная нагрузка пуста, возникает ошибка.

диагностика;

  1. Определите правило преобразования JSON в XML, в котором произошла ошибка. Эту информацию можно найти в элементе faultstring ответа об ошибке. Например, в следующем фрагменте кода faultstring название правила – Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Проверьте элемент <Source> в XML-файле правил, полученном из JSON, и определите указанную переменную. Например, в следующем правиле преобразования JSON в XML элемент <Source> имеет значение request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
    <DisplayName>Convert-JSONToXML</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>request</Source>
    </JSONToXML>
    
  3. Проверьте, не является ли пустой переменная, указанная для элемента <Source> в правиле. Если он пуст, то это и есть причина ошибки.

    В приведенном выше примере правила преобразования JSON в XML полезная нагрузка запроса (то есть тело запроса), отправленного клиентом, пуста.

    Пример:

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json"
    

    Поскольку полезная нагрузка ответа JSON пуста, вы получите код ошибки:

    steps.json2xml.ExecutionFailed
    

    Эта ошибка также может возникнуть, если для элемента <Source> задано значение response, но сервер передает пустую полезную нагрузку.

Разрешение

Убедитесь, что входные данные, переданные в правило JSON в XML в элементе <Source>, являются действительной полезной нагрузкой JSON и не пусты.

Чтобы устранить проблему с примером правил JSON-XML, передайте действительную полезную нагрузку JSON. Пример:

  1. Создайте файл с названием city.json со следующим содержимым:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. Выполните вызов API с помощью команды cURL, как показано ниже:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
    

Причина: недействительный или неправильный входной запрос

Эта ошибка возникает, если правило JSON в XML обрабатывает недопустимый или неправильно отформатированный входной код.

Например, если в качестве входных данных для правила "JSON в XML" указан следующий недопустимый код JSON:

[
    "args": ["name" : "Google" ]
]

появится ошибка:

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

диагностика;

  1. Определите правило преобразования JSON в XML, в котором произошла ошибка. Эту информацию можно найти в элементе faultstring ответа об ошибке. Например, в следующем фрагменте кода faultstring название правила – Convert-JSONToXML:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. Проверьте элемент <Source>, указанный в XML-файле правил преобразования JSON в XML, который не удалось обработать. Например, в следующем правиле преобразования JSON в XML элемент <Source> имеет значение переменной request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
      <DisplayName>Convert-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>request</OutputVariable>
      <Source>request</Source>
    </JSONToXML>
    
  3. Проверьте, является ли входные данные, указанные в элементе <Source>, допустимой полезной нагрузкой JSON. Если входные данные недействительны или имеют неверный формат, это и будет причиной ошибки.

    Предположим, что в правило был передан следующий недопустимый код JSON:

    [
        "args": ["name" : "Google" ]
    ]
    

    Вот пример вызова API, показывающий, как был передан запрос:

    curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type:
    application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
    

    Полезная нагрузка JSON, переданная в запросе, недействительна, поскольку объект JSON начинается и заканчивается квадратными скобками ([ ]). Из-за этого вы получаете код ошибки:

    steps.json2xml.ExecutionFailed

    Эта ошибка также может возникнуть, если для элемента <Source> задано значение response, но полезная нагрузка ответа JSON недействительна или имеет неверный формат.

Разрешение

Убедитесь, что входные данные, переданные в элемент <Source> правила преобразования JSON в XML, действительны и не повреждены.

Чтобы исправить проблему с примером правила преобразования JSON в XML, описанным выше, передайте действительный запрос полезной нагрузки JSON следующим образом:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

Код ошибки

steps.json2xml.OutputVariableIsNotAvailable

Тело ответа с ошибкой

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Пример ошибки

{
    "fault": {
        "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
        }
    }
}

Причина

Эта ошибка возникает, если переменная, указанная в элементе <Source> правила JSON в XML, имеет строковый тип, а элемент <OutputVariable> не определен. Элемент <OutputVariable> обязателен, если переменная, определенная в элементе <Source>, имеет тип string (строка).

диагностика;

  1. Определите правило JSON to XML, в котором произошла ошибка. Его можно найти в элементе faultstring ответа об ошибке. Например, в следующем фрагменте кода faultstring название правила – Check-JSONToXML:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. В правиле "Не удалось преобразовать JSON в XML" проверьте, не отсутствует ли <OutputVariable>.

    В следующем примере правила JSONToXML отсутствует элемент <OutputVariable>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
        <DisplayName>Check-JSONToXML</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <Source>PostalCode</Source>
    </JSONToXML>
    
  3. Определите тип переменной, указанной в элементе <Source>:

    1. Найдите в прокси API код, в котором переменная была определена впервые.
    2. Определив, в каких правилах переменная задается и заполняется первой, определите ее тип, выполнив следующие действия:
      1. Проверьте значение атрибута type (если он есть).
      2. Если атрибут type отсутствует, переменная считается строкой.
    3. Если тип переменной – строка, то это и есть причина ошибки. Информацию о распространенных переменных и их типах можно найти в справочнике по переменным.

    Например, посмотрите на переменную PostalCode в приведенном выше правиле преобразования JSON в XML.

    Предположим, что правило Assign Message используется для присвоения значения переменной PostalCode, как показано ниже:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Обратите внимание, что тип переменной, заданный в <AssignVariable>, – строка. Таким образом, переменная PostalCode имеет строковый тип.

    Напомним, что переменная PostalCode используется в элементе <Source> правила JSONToXML:

    <Source>PostalCode</Source>
    

    Поскольку PostalCode имеет строковый тип, а элемент <OutputVariable> отсутствует, вы получите код ошибки:

    steps.json2xml.OutputVariableIsNotAvailable
    

Разрешение

Если переменная, указанная в элементе <Source> правила JSONToXML, имеет тип string, убедитесь, что элемент <OutputVariable> определен в правиле.

Чтобы исправить описанное выше правило JSONToXML, добавьте элемент <OutputVariable>, как показано ниже.

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
      <DisplayName>Check-JSONToXML</DisplayName>
      <Properties/>
      <Options>
          <NullValue>NULL</NullValue>
          <NamespaceBlockName>#namespaces</NamespaceBlockName>
          <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
          <NamespaceSeparator>:</NamespaceSeparator>
          <TextNodeName>#text</TextNodeName>
          <AttributeBlockName>#attrs</AttributeBlockName>
          <AttributePrefix>@</AttributePrefix>
          <InvalidCharsReplacement>_</InvalidCharsReplacement>
          <ObjectRootElementName>Root</ObjectRootElementName>
          <ArrayRootElementName>Array</ArrayRootElementName>
          <ArrayItemElementName>Item</ArrayItemElementName>
      </Options>
      <OutputVariable>response</OutputVariable>
      <Source>PostalCode</Source>
  </JSONToXML>

InCompatibleTypes

Код ошибки

steps.json2xml.InCompatibleTypes

Тело ответа с ошибкой

{
    "fault": {
        "faultstring": "JSONToXML[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

Пример ошибки

{
    "fault": {
        "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.json2xml.InCompatibleTypes"
        }
    }
}

Причина

Эта ошибка возникает, если тип переменной, определенный в элементе <Source>, не совпадает с типом переменной, определенным в элементе <OutputVariable>. Типы переменных, содержащихся в элементах <Source> и <OutputVariable>, должны совпадать.

Допустимые типы: message и string.

диагностика;

  1. Определите правило JSON to XML, в котором произошла ошибка. Его можно найти в элементе faultstring ответа об ошибке. Например, в следующем фрагменте кода faultstring название правила – JSONToXML_checktype:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. В примечании к правилу "Не удалось преобразовать JSON в XML" запишите значения, указанные в <OutputVariable> и <Source>.

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

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype">
        <DisplayName>JSONToXML_checktype</DisplayName>
        <Properties/>
        <Options>
            <NullValue>NULL</NullValue>
            <NamespaceBlockName>#namespaces</NamespaceBlockName>
            <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
            <NamespaceSeparator>:</NamespaceSeparator>
            <TextNodeName>#text</TextNodeName>
            <AttributeBlockName>#attrs</AttributeBlockName>
            <AttributePrefix>@</AttributePrefix>
            <InvalidCharsReplacement>_</InvalidCharsReplacement>
            <ObjectRootElementName>Root</ObjectRootElementName>
            <ArrayRootElementName>Array</ArrayRootElementName>
            <ArrayItemElementName>Item</ArrayItemElementName>
        </Options>
        <OutputVariable>response</OutputVariable>
        <Source>PostalCode</Source>
    </JSONToXML>
    
    
  3. Определите тип переменной, указанной в элементах <Source> и <OutputVariable>:

    1. Найдите в прокси API код, в котором впервые определяются эти переменные.
    2. Определив, в каких правилах переменная задается и заполняется первой, определите ее тип, выполнив следующие действия:
      1. Проверьте значение атрибута type (если он есть).
      2. Если атрибут type отсутствует, переменная считается строкой.
    3. Если тип переменной, указанной в <Source>, – строка, а тип <OutputVariable> – сообщение, или наоборот, это и является причиной ошибки. Информацию о распространенных переменных и их типах можно найти в справочнике по переменным.

    Например, рассмотрим правило "Назначить сообщение", которое используется для присвоения значения переменной PostalCode, как показано ниже:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
        <DisplayName>Assign_PostalCode</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>PostalCode</Name>
            <Value>{"value":"56008"}</Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    Обратите внимание, что тип переменной, заданный в <AssignVariable>, – строка, поэтому переменная PostalCode имеет тип "строка".

    Напомним, что переменная PostalCode используется в элементе <Source> правила JSONToXML:

    <Source>PostalCode</Source>
    

    Напоминаем, что переменная response используется в элементе <OutputVariable> правила JSONToXML:

    <OutputVariable>response</OutputVariable>
    

    Поскольку PostalCode имеет строковый тип, а переменная response – тип сообщения, они несовместимы, поэтому вы получаете код ошибки:

    steps.json2xml.InCompatibleTypes
    

    Эта ошибка также может возникнуть, если переменная в элементе <Source> имеет тип message, а переменная в элементе <OutputVariable> – строковый тип.

Разрешение

Убедитесь, что тип переменной, определенный в элементе <Source>, всегда совпадает с типом переменной, определенным в элементе <OutputVariable>. Типы переменных, содержащихся в элементах <Source> и <OutputVariable>, должны совпадать. Убедитесь, что тип элементов <Source> и <OutputVariable> – строка или сообщение.

Чтобы исправить описанное выше правило JSON в XML, можно объявить другую переменную PostalCode_output типа string, используя правило Assign Message Policy, и использовать эту переменную в элементе <OutputVariable> правила JSON в XML.

Измененные правила назначения сообщений:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
    <DisplayName>Assign_PostalCode</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Value>{"value":"56008"}</Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>PostalCode_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

Измененные правила JSONToXML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>JSONToXML_checktype</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>PostalCode_output</OutputVariable>
    <Source>PostalCode</Source>
</JSONToXML>

InvalidSourceType

Код ошибки

steps.json2xml.InvalidSourceType

Тело ответа с ошибкой

{
    "fault": {
        "faultstring": "JSONToXML[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

Пример ошибки

{
    "fault": {
        "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.json2xml.InvalidSourceType"
        }
    }
}

Причина

Эта ошибка возникает, если тип переменной, используемой для определения элемента <Source>, недопустим.Допустимые типы переменных: message и string.

диагностика;

  1. Определите недопустимый тип источника, используемый в правиле JSON в XML. Эта информация есть в сообщении об ошибке. Например, в приведенной ниже ошибке недопустимый тип – Integer.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. Проверьте все правила преобразования JSON в XML в определенном прокси API, где произошла ошибка. В правиле "Не удалось преобразовать JSON в XML" запишите название переменной, указанной в <Source>.

    Ниже приведен пример правила, в котором переменная EmployeeID указана в элементе <Source>:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
    <DisplayName>Check_SourceType</DisplayName>
    <Properties/>
    <Options>
        <NullValue>NULL</NullValue>
        <NamespaceBlockName>#namespaces</NamespaceBlockName>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <TextNodeName>#text</TextNodeName>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
    </Options>
    <OutputVariable>request</OutputVariable>
    <Source>EmployeeID</Source>
</JSONToXML>
  1. Определите тип переменной, указанной в элементе <Source>:

    1. Найдите в прокси API код, в котором эта переменная была определена впервые.
    2. Определив, в каких правилах переменная задается и заполняется первой, определите ее тип, выполнив следующие действия:
      1. Проверьте значение атрибута type (если он есть).
      2. Если атрибут type отсутствует, переменная считается строкой.
    3. Если тип переменной, указанной в <Source>, не является ни сообщением, ни строкой, то это и есть причина ошибки. Информацию о распространенных переменных и их типах можно найти в справочнике по переменным.

    Предположим, что правило ExtractVariables используется для извлечения значения из полезной нагрузки JSON и присваивает это значение переменной EmployeeID целочисленного типа, как показано ниже:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>request</Source>
        <JSONPayload>
            <Variable name="EmployeeID" type="integer">
                <JSONPath>$.ID</JSONPath>
            </Variable>
        </JSONPayload>
    </ExtractVariables>
    

    Напомним, что переменная EmployeeID используется в элементе <Source> правила JSONToXML:

    <Source>EmployeeID</Source>
    

    Поскольку тип этой переменной – Integer, который не является допустимым типом <Source>, прокси API завершается с ошибкой:

    steps.json2xml.InvalidSourceType
    

Разрешение

Убедитесь, что тип переменной, используемой для элемента <Source>, действителен. Допустимые типы <Source>: message и string.

Чтобы избежать указанной выше ошибки при использовании правила JSONToXML, можно использовать переменную request, которая имеет тип message, или любую другую строку, представляющую собой действительную полезную нагрузку JSON.