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

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

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

Код ошибки

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 , состоящее из 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-массив с более чем тремя элементами, то будет выдана эта ошибка.

Диагноз

  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-файле массив с именем models в строке 3 содержит 5 элементов. Поскольку количество элементов массива превышает 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-данном глубина контейнера в строке 5 равна 6. Поскольку глубина больше 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
    

Разрешение

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

В приведенном выше примере измените полезную нагрузку 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. Найдите в сообщении об ошибке имя политики и имя переменной Source. Например, в следующем сообщении об ошибке имя политики — 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 . Поскольку requests не является допустимым значением и отсутствует в потоке, где выполняется политика, вы получаете ошибку:

    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 .

Переменные типа Message представляют собой полные HTTP-запросы и ответы. Встроенные переменные потока Apigee Edge — request, response и message — имеют тип message. Для получения дополнительной информации о переменных типа Message см. справочник по переменным .

Диагноз

  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 установлено значение message.content :

    <?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 не относится к типу message, возникает ошибка:

    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>