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

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

Источник недоступен

Код ошибки

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"
        }
    }
}

Причина

Эта ошибка возникает, если переменная сообщения , указанная в элементе <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 в XML, в котором произошла ошибка, убедитесь, что имя переменной, заданной в элементе <Source> , совпадает с именем переменной, указанным в строке ошибки (шаг #1 выше). Например, следующая политика преобразования JSON в XML указывает переменную с именем response в элементе <Source> , которая совпадает с именем в 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 в XML должна выполняться в потоке запроса . Напомним, что переменная response используется в элементе <Source> политики преобразования JSON в XML. Переменная ответа доступна только в потоке ответа.

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

    steps.json2xml.SourceUnavailable
    

Разрешение

Убедитесь, что переменная, заданная в элементе <Source> неудачной политики преобразования 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>

Выполнение завершилось с ошибкой.

Код ошибки

steps.json2xml.ExecutionFailed

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

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

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

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

Причина Описание
Отсутствует входная полезная нагрузка Входные данные (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 в 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 в 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-объект недействителен, поскольку он начинается и заканчивается квадратными скобками ([ ]). По этой причине вы получаете код ошибки:

    steps.json2xml.ExecutionFailed

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

Разрешение

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

Чтобы исправить проблему с описанной выше политикой преобразования 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> имеет строковый тип.

Диагноз

  1. Определите политику преобразования JSON в 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. Проверьте значение атрибута типа (если он присутствует).
      2. Если атрибут типа отсутствует, то переменная считается строкой.
    3. Если тип переменной — строка, то это и является причиной ошибки. Подробнее о распространённых переменных и их типах можно узнать в справочнике по переменным .

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

    В качестве примера рассмотрим ситуацию, когда политика «Присвоить сообщение» используется для присвоения значения переменной с именем 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 имеет тип string.

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

    <Source>PostalCode</Source>
    

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

    steps.json2xml.OutputVariableIsNotAvailable
    

Разрешение

Убедитесь, что если переменная, указанная в элементе <Source> политики JSONToXML, имеет строковый тип, то в политике определен элемент <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>

Несовместимые Типы

Код ошибки

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 в 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. Проверьте значение атрибута типа (если он присутствует).
      2. Если атрибут типа отсутствует, то переменная считается строкой.
    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> имеет тип string.

Разрешение

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

Чтобы исправить описанную выше политику преобразования JSON в XML, вы можете объявить еще одну переменную PostalCode_output string с помощью политики присвоения сообщений и использовать эту переменную в элементе <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. Проверьте значение атрибута типа (если он присутствует).
      2. Если атрибут типа отсутствует, то переменная считается строкой.
    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 Proxy выдает ошибку:

    steps.json2xml.InvalidSourceType
    

Разрешение

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

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