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

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

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

Код ошибки

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 to XML, имеет одно из следующих значений:

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

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

Диагностика

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

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

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

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

    тогда это причина ошибки.

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

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

    steps.json2xml.SourceUnavailable
    

Разрешение

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

Чтобы исправить пример политики JSON to 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 to XML, недействительны или имеют неверный формат.

Причина: отсутствуют входные полезные данные.

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

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

Диагностика

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

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

    Например:

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

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

    steps.json2xml.ExecutionFailed
    

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

Разрешение

Убедитесь, что входные данные, переданные в политику JSON to 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 to XML анализирует недопустимые или искаженные входные данные, вы получаете эту ошибку.

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

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

вы получите ошибку:

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

Диагностика

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

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

Разрешение

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

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

{
  "args"  : {

        "name"  :  "Google"
   }
}

ВыходнаяVariableIsNotAvailable

Код ошибки

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 to XML, имеет строковый тип, а элемент <OutputVariable> не определен. Элемент <OutputVariable> является обязательным, если переменная, определенная в элементе <Source> , имеет строковый тип.

Диагностика

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

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. В неудавшейся политике JSON to 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 to 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, имеет строковый тип, элемент <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 to XML, в которой произошла ошибка. Вы можете найти это в элементе faultstring ответа об ошибке. Например, в следующей faultstring имя политики — JSONToXML_checktype :

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. В неудавшейся политике JSON to 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> — сообщением или наоборот, это и есть причина ошибки. Вы можете узнать об распространенных переменных и их типах в справочнике по переменным .

    В качестве примера рассмотрим политику 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>
    

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

    <OutputVariable>response</OutputVariable>
    

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

    steps.json2xml.InCompatibleTypes
    

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

Разрешение

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

Чтобы исправить описанную выше политику JSON to XML, вы можете объявить другую переменную PostalCode_output типа string с помощью политики назначения сообщений и использовать эту переменную в элементе <OutputVariable> политики JSON to 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>

Инвалидсаурцетип

Код ошибки

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 to 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 to XML запишите имя переменной, указанной в <Source> .

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

<?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, вы можете использовать переменную запроса типа message или любую другую строку, которая является допустимой полезной нагрузкой JSON.