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

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

Выполнение не удалось

Код ошибки

steps.jsonthreatprotection.ExecutionFailed

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]: error_description
          at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

Политика JSONThreatProtection может вызывать множество различных типов ошибок ExecutionFailed. В таблице ниже перечислены различные типы ошибок и их возможные причины:

Тип ошибки Причина
Превышена длина имени записи объекта Превышена максимальная длина строки, разрешенная в имени записи объекта.
Превышено количество записей объектов Превышено максимальное количество записей, разрешенное в объекте.
Превышено количество элементов массива Превышено максимально допустимое количество элементов в массиве.
Превышена глубина контейнера Превышена максимально допустимая глубина вложенности.
Превышена длина строкового значения Превышена максимальная длина строкового значения.
Неверный объект JSON Входная полезная нагрузка JSON недействительна.

Превышена длина имени записи объекта

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry name length at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry name length at line 2",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Причина

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

Например, если в политике для элемента <ObjectEntryNameLength> указано значение 5, но полезные данные входного сообщения имеют свойство JSON, имя которого превышает 5 символов, возникает эта ошибка.

Диагностика

  1. Изучите сообщение об ошибке, чтобы определить имя политики JSONThreatProtection и номер строки, в которой встречается длинное имя записи. Например, в следующем сообщении об ошибке имя политики JSONThreatProtection — JSON-Threat-Protection-1 , а номер строки в полезных данных — 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. Изучите политику, которую вы определили на шаге 1, и обратите внимание на значение, указанное в элементе <ObjectEntryNameLength> .

    Например, в следующей политике JSONThreatProtection <ObjectEntryNameLength> установлено значение 5 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>5</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Проверьте конкретный номер строки (определенный на шаге 1) входных полезных данных и проверьте, превышает ли длина имени объекта значение, указанное в элементе <ObjectEntryNameLength> (определенном на шаге 2). Если длина имени объекта превышает это число, это является причиной ошибки.

    Вот пример входной полезной нагрузки:

    {
       "number" : 500,
       "string" : "text"
    }
    

    Полезная нагрузка JSON, показанная выше, имеет свойство с именем number в строке 2, которое содержит 6 символов (длина имени равна 6). Поскольку длина имени объекта превышает 5 (значение, указанное для элемента <ObjectEntryNameLength> ), вы получаете следующую ошибку:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    

Разрешение

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

Однако если вы определите, что более длинные имена записей объекта могут быть указаны в полезных данных без каких-либо последствий, измените <ObjectEntryNameLength> на подходящее значение в соответствии с вашими требованиями.

Например, если вы считаете, что можете разрешить имена объектов длиной до 10 символов, измените политику JSONThreatProtection следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>10</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Превышено количество записей объектов

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry count at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry count at line 7",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Причина

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

Например, если элемент <ObjectEntryCount> равен 5, но входные полезные данные JSON содержат более 5 записей, возникает эта ошибка.

Диагностика

  1. Изучите сообщение об ошибке, чтобы определить имя политики JSONThreatProtection и номер строки, в которой превышено количество записей. Например, в следующем сообщении об ошибке имя политики — JSON-Threat-Protection-1 , а номер строки в полезных данных — 7 :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. Запишите значение, указанное в элементе <ObjectEntryCount> политики (определенном на шаге 1).

    В следующем примере политики <ObjectEntryCount> установлено значение 5 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Проверьте конкретный номер строки (определенный на шаге 1) входных полезных данных и проверьте, превышает ли количество сущностей в полезных данных значение, указанное для элемента <ObjectEntryCount> (определенное на шаге 2). Если количество объектов превышает количество записей объектов, это и есть причина ошибки.

    Вот пример входной полезной нагрузки:

    {
    "name" : "John",
    "id" : 234687,
    "age" : 31,
    "city" : "New York",
    "country" : "USA",
    "company" : "Google"
    }
    

    В полезных данных JSON, показанных выше, шестая запись находится в строке №7 (компания). Поскольку количество записей объекта во входных полезных данных JSON превышает 5 (значение, указанное для элемента <ObjectEntryCount> ), вы получаете следующую ошибку:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count at
    line 7
    

Разрешение

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

Однако если вы решите, что в полезные данные можно включить больше записей объектов без каких-либо последствий, измените <ObjectEntryCount> на подходящее значение в соответствии с вашими требованиями.

Например, если вы считаете, что можете разрешить до 10 записей объектов, измените политику JSONThreatProtection следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>10</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Превышено количество элементов массива

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded array element count at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded array element count at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Причина

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

Например, если для элемента <ArrayElementCount> указано значение 3 , но входные полезные данные содержат массив JSON с более чем 3 элементами, возникает эта ошибка.

Диагностика

  1. Изучите сообщение об ошибке, чтобы определить имя политики и номер строки, в которой превышена длина массива. Например, в следующем сообщении об ошибке имя политики — JSON-Threat-Protection-1 , а номер строки в полезных данных — 3 :

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. Запишите значение, указанное для элемента <ArrayElementCount> политики (определенного на шаге 1).

    В следующем примере политики JSONThreatProtection <ArrayElementCount> установлено значение 3 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Проверьте конкретный номер строки (определенный на шаге 1) входных полезных данных и проверьте, имеет ли указанный там массив большее количество, чем число, указанное в элементе <ArrayElementCount> (определенном на шаге 2). Если количество элементов массива превышает счетчик, то это и есть причина ошибки.

    Вот пример входной полезной нагрузки:

    {
     "name":"Ford",
     "models":[
        "Mustang",
        "Endeavour",
        "Fiesta",
        "EcoSport",
        "Focus"
     ]
    }
    

    Показанная выше полезная нагрузка JSON содержит 5 элементов в массиве с именем models в строке 3. Поскольку количество элементов массива больше 3 (значение, указанное для элемента <ArrayElementCount> ), вы получаете следующую ошибку:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count
    at line 3
    

Разрешение

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

Однако если вы решите, что в массиве может быть разрешено большее количество элементов, измените <ArrayElementCount> на подходящее значение в соответствии с вашими требованиями.

Например, если вы считаете, что можете разрешить до 5 элементов массива, измените политику следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>5</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Превышена глубина контейнера

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

Трафик среды выполнения возвращает код ответа 500 со следующей ошибкой:

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded container depth at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded container depth at line 5",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Причина

Эта ошибка возникает, если полезная нагрузка входного сообщения, указанная элементом <Source> , содержит объект JSON, содержащий элементы JSON с глубиной контейнера, превышающей максимальную глубину контейнера, указанную в элементе <ContainerDepth> политики. Глубина контейнера — это максимально допустимая глубина вложенности для элементов JSON. Например, массив, содержащий объект, содержащий объект, будет иметь глубину включения 3.

Например, если элемент <ContainerDepth> имеет значение 3 , но входные полезные данные имеют глубину контейнера, превышающую этот предел, возникает эта ошибка.

Диагностика

  1. Изучите сообщение об ошибке, чтобы определить имя политики JSONThreatProtection и номер строки, в которой превышена глубина контейнера. Например, в следующем сообщении об ошибке имя политики — JSON-Threat-Protection-1 , а номер строки в полезных данных — 5 .

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. Запишите значение, указанное для элемента <ContainerDepth> (определенного на шаге 1).

    В следующем примере политики JSONThreatProtection <ContainerDepth> установлено значение 5 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Проверьте конкретный номер строки (определенный на шаге 1) входных полезных данных и проверьте, превышает ли глубина контейнера в полезных данных значение, указанное в элементе <ContainerDepth> (определенном на шаге 2). Если глубина контейнера превышает счетчик, это и есть причина ошибки.

    Вот пример входной полезной нагрузки:

    {
     "ContainerDepth2":[ {
           "ContainerDepth4":[
              {
                 "ContainerDepth6":[
                    "1",
                    "2"
                 ]
              }
           ]
        }
     ]
    }
    

    Полезная нагрузка JSON, показанная выше, имеет глубину контейнера 6 в строке 5. Поскольку глубина больше 5, значение, указанное для элемента <ContainerDepth> политики JSONThreatProtection, вы получаете следующую ошибку:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    

Разрешение

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

Однако если вы решите, что более высокая глубина контейнера приемлема, измените <ContainerDepth> на подходящее значение в соответствии с вашими требованиями.

Например, если вы считаете, что можете разрешить глубину контейнера до 10, измените политику следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>10</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Превышена длина строкового значения

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded string value length at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded string value length at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Причина

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

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

Диагностика

  1. Изучите сообщение об ошибке, чтобы определить имя политики и номер строки, в которой длина строки превышена. В следующем примере имя политики — JSON-Threat-Protection-1 and строка в полезных данных 3 .

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. Запишите значение, указанное для элемента <StringValueLength> в (определенном на шаге 1).

    В следующем примере политики JSONThreatProtection для <StringValueLength> установлено значение 50 :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Проверьте конкретный номер строки (определенный на шаге 1) входных полезных данных и проверьте, превышает ли длина значения количество символов, указанное для элемента <StringValueLength> (определенное на шаге 2). Если длина значения превышает предел, это является причиной ошибки.

    Вот пример входной полезной нагрузки:

    {
      "Country": "New Zealand",
      "Place Name": "Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu"
    }
    

    Показанная выше полезная нагрузка JSON содержит объект с именем Place Name , значение которого Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu содержит 85 символов в строке 3. Поскольку длина значения превышает 50 (значение, указанное в элементе <StringValueLength> , вы получаете следующую ошибку:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length
    at line 3
    

Разрешение

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

Однако если вы определите, что в полезных данных можно указать большую длину значения, измените <StringValueLength> на подходящее значение в соответствии с вашими требованиями.

Например, если вы считаете, что можете разрешить значение длиной до 90, измените политику следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>90</StringValueLength>
</JSONThreatProtection>

Недопустимый объект JSON

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: string: at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: Expecting : at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Причина

Эта ошибка возникает, если полезные данные входного сообщения, указанные элементом <Source> в политике JSONThreatProtection, не являются допустимым объектом JSON.

Диагностика

  1. Изучите сообщение об ошибке, чтобы определить имя политики и номер строки, в которой произошла ошибка. В следующем примере имя политики — JSON-Threat-Protection-1 and строка в полезных данных 2 .

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Проверьте конкретный номер строки (указанный на шаге 1) входных полезных данных и проверьте, действительно ли объект JSON, переданный в полезных данных, является допустимым объектом JSON.

    Вот пример входной полезной нагрузки:

    {
      "Longitude": 6.11499,
      "Latitude"  50.76891
    }
    

    В полезных данных JSON, показанных выше, в строке 3 нет ":" (двоеточие). Поскольку это недопустимый объект JSON, вы получаете сообщение об ошибке:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    Expecting : at line 3
    

Разрешение

Убедитесь, что действительные входные полезные данные JSON передаются любому прокси-серверу API, который включает политику JSONThreatProtection.

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

{
    "Longitude": 6.11499,
  "Latitude" : 50.76891
}

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

Код ошибки

steps.jsonthreatprotection.SourceUnavailable

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]::
          Source[var_name] is not available"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]::
          Source requests is not available",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

Причина

Эта ошибка возникает, если переменная сообщения , указанная в элементе <Source> политики JSONThreatProtection, имеет одно из следующих значений:

  • Вне области действия (недоступно в конкретном потоке, в котором выполняется политика)
  • Не является одним из допустимых значений request , response или message

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

Диагностика

  1. Определите имя политики и имя исходной переменной из сообщения об ошибке. Например, в следующем сообщении об ошибке имя политики — JSON-Threat-Protection-1 , а переменная Source — requests :

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. Проверьте значение, указанное для элемента <Source> , указанного на шаге 1.

    В следующем примере политики JSONThreatProtection для элемента <Source> установлено значение requests .

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>requests</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    Допустимыми значениями элемента <Source> являются request , response или message . Поскольку запросы не являются допустимым значением и не существуют в потоке выполнения политики, вы получаете сообщение об ошибке:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    

Разрешение

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

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

NonMessageVariable

Код ошибки

steps.jsonthreatprotection.NonMessageVariable

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Variable var_name does not resolve to a Message"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Variable message.content does not resolve to a Message",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

Причина

Эта ошибка возникает, если для элемента <Source> в политике JSONThreatProtection установлена ​​переменная, которая не имеет типа message .

Переменные типа сообщения представляют собой все HTTP-запросы и ответы. Встроенные переменные потока Apigee Edge, запрос, ответ и сообщение имеют тип сообщения. Дополнительные сведения о переменных сообщения см. в справочнике по переменным .

Диагностика

  1. Определите имя политики JSONThreatProtection и имя переменной Source из сообщения об ошибке. Например, в следующем сообщении об ошибке имя политики — JSON-Threat-Protection-1 , а переменная Source — message.content :

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. Изучите элемент <Source> политики JSONThreatProtection (определенный на шаге 1).

    В следующем примере политики JSONThreatProtection <Source> установлено значение message.content вместо message :

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>message.content</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    Поскольку message.content не относится к типу сообщения, вы получите сообщение об ошибке:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does
    not resolve to a Message
    

Разрешение

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

Чтобы исправить политику, вы можете изменить элемент <Source> , указав переменную типа message. Например, в неудачном JSONThreatProtection вы можете указать элемент <Source> как message :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>message</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>