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

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

ExecutionFailed

Код ошибки

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, показанной выше, в строке 2 есть свойство number, длина которого составляет 6 символов. Поскольку длина названия объекта больше пяти (значения, указанного для элемента <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 содержит более пяти записей, возникает эта ошибка.

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

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

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

Разрешение

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

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

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

<?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 andline в полезной нагрузке 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 andline в полезной нагрузке 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Проверьте строку, номер которой указан на шаге 1, и убедитесь, что объект 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
}

SourceUnavailable

Код ошибки

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

Причина

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

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

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

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

  1. Определите название правила и название переменной "Источник" из сообщения об ошибке. Например, в следующем сообщении об ошибке название правила – JSON-Threat-Protection-1, а переменная "Источник" – 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.

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

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

  1. Определите название правила JSONThreatProtection и название переменной Source из сообщения об ошибке. Например, в следующем сообщении об ошибке название правила – JSON-Threat-Protection-1, а переменная источника – 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 задан как переменная потока типа message, которая существует в потоке, где выполняется правило.

Чтобы исправить правила, измените элемент <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>