Вы просматриваете документацию 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 символов, то будет выдана эта ошибка.
Диагноз
Изучите сообщение об ошибке, чтобы определить имя политики 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Изучите политику, которую вы определили на шаге 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>Проверьте номер строки (указанный на шаге 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 записей, то будет выдана эта ошибка.
Диагноз
Изучите сообщение об ошибке, чтобы определить имя политики 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Запишите значение, указанное в элементе
<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>Проверьте номер строки (указанный на шаге 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-массив с более чем тремя элементами, то будет выдана эта ошибка.
Диагноз
Изучите сообщение об ошибке, чтобы определить имя политики и номер строки, где превышена длина массива. Например, в следующем сообщении об ошибке имя политики —
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Запишите значение, указанное для элемента
<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>Проверьте номер строки (указанный на шаге 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 , но глубина контейнера входных данных превышает этот предел, то будет выдана эта ошибка.
Диагноз
Изучите сообщение об ошибке, чтобы определить имя политики 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Запишите значение, указанное для элемента
<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>Проверьте номер строки (указанный на шаге 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 символов, то будет выдана эта ошибка.
Диагноз
Изучите сообщение об ошибке, чтобы определить имя политики и номер строки, где превышена длина строки. В следующем примере имя политики —
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Запишите значение, указанное для элемента
<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>Проверьте номер строки (указанный на шаге 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.
Диагноз
Изучите сообщение об ошибке, чтобы определить имя политики и номер строки, где произошла ошибка. В следующем примере имя политики —
JSON-Threat-Protection-1 andстрока в полезной нагрузке2.JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3Проверьте номер конкретной строки (указанный на шаге 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> в политике задан значением переменной, которая не существует в потоке, где выполняется политика.
Диагноз
Найдите в сообщении об ошибке имя политики и имя переменной Source. Например, в следующем сообщении об ошибке имя политики —
JSON-Threat-Protection-1, а переменная Source —requests:JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not availableПроверьте значение, указанное для элемента
<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 см. справочник по переменным .
Диагноз
Найдите в сообщении об ошибке имя политики JSONThreatProtection и имя переменной Source. Например, в следующем сообщении об ошибке имя политики —
JSON-Threat-Protection-1, а переменная Source —message.content:JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a MessageИзучите элемент
<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>