Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
Исходное сообщениенедоступно
Код ошибки
steps.extractvariables.SourceMessageNotAvailable
Тело ответа об ошибке
{
"fault": {
"faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]",
"detail": {
"errorcode": "steps.extractvariables.SourceMessageNotAvailable"
}
}
}
Причина
Эта ошибка возникает, если переменная сообщения , указанная в элементе <Source> политики извлечения переменных :
- вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
- не может быть решено (не определено)
Например, эта ошибка возникает, если политика извлечения переменных выполняется в потоке запросов, но элементу <Source> присвоена переменная response или error , которой не существует в потоке запросов.
Диагностика
Определите политику извлечения переменных, в которой произошла ошибка, и имя недоступной переменной. Оба эти элемента можно найти в элементе
faultstringответа об ошибке. Например, в следующей строке ошибки имя политики —ExtractVariables-1, а переменная —response:"faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"В неудавшемся XML-файле политики извлечения переменных убедитесь, что имя переменной, установленной в элементе, соответствует имени переменной, указанной в строке ошибки (шаг № 1 выше). Например, следующая политика извлечения переменных определяет в элементе переменную с именем
response, которая соответствует значению в строке ошибки:<ExtractVariables name="ExtractVariables-1"> <Source>response</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> </ExtractVariables>Определите, определена ли переменная, используемая в элементе
<Source>, и доступна ли она в потоке, в котором выполняется политика извлечения переменных.Если переменная:
- вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
- не может быть решено (не определено)
тогда это причина ошибки.
В качестве примера предположим, что политика извлечения переменных, показанная выше, выполняется в потоке запросов . Напомним, что переменная
responseиспользуется в элементе<Source>политики извлечения переменных. Переменнаяresponseдоступна только в потоке ответов.Поскольку переменная
responseне существует в потоке запроса, вы получаете код ошибки:steps.extractvariables.SourceMessageNotAvailable.
Разрешение
Убедитесь, что переменная, установленная в элементе <Source> неудачной политики извлечения переменных, определена и существует в потоке, в котором выполняется политика.
Чтобы исправить приведенный выше пример политики извлечения переменных, вы можете изменить элемент <Source> , чтобы использовать переменную request в том виде, в котором она существует в потоке запроса:
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>
SetVariableFailed
Код ошибки
steps.extractvariables.SetVariableFailed
Тело ответа об ошибке
{
"fault": {
"faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]",
"detail": {
"errorcode": "steps.extractvariables.SetVariableFailed"
}
}
}
Причина
Эта ошибка возникает, если политика извлечения переменных не может установить значение переменной. Обычно это происходит, если вы пытаетесь присвоить значения нескольким переменным, имена которых начинаются с одних и тех же слов во вложенном формате, разделенном точками.
Например, предположим, что вы создаете/присвояете значение переменной var.color . В этом случае color выделяется как узел объекта. Если вы затем попытаетесь присвоить значение другой переменной var.color.next , это не удастся, поскольку color уже выделен, и ему не разрешено присваивать ему другую переменную.
Диагностика
Определите политику извлечения переменных, в которой произошла ошибка, и имя переменной, для которой не удалось установить значение. Оба эти элемента можно найти в элементе
faultstringответа об ошибке. Например, в следующей строке ошибки имя политики —ExtractColors, а переменная —var.color.next:"faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"В неудавшемся XML-файле политики извлечения переменных убедитесь, что имя переменной соответствует имени переменной, указанному в строке ошибки (шаг № 1 выше). Например, следующая политика пытается присвоить значение из параметра запроса запроса переменной с именем
var.color.next(значение, которое отображается в строке ошибки):<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{color.next}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>Проверьте все имена переменных, использованные в неудачной политике извлечения переменных. Если вы присвоили значение другой переменной, имя которой начинается с того же имени, что и имя переменной, указанное в строке ошибки (шаг № 1 выше), то это и есть причина ошибки.
В примере политики извлечения переменных, показанном выше, обратите внимание на следующее:
- Значение параметра запроса с именем
colorсначала присваивается переменнойvar.color( Примечание:var— это префикс для всех переменных, заданных в элементе<VariablePrefix>) - В следующем присваивании значение параметра запроса
nextcolorприсваивается другой переменнойvar.color.next. - Поскольку
var.colorуже выделена, политика извлечения переменных не может выделить другую вложенную переменнуюvar.color.next. Итак, вы получаете код ошибки:steps.extractvariables.SetVariableFailed
- Значение параметра запроса с именем
Разрешение
Убедитесь, что у вас нет нескольких имен переменных, имена которых начинаются с одних и тех же слов, вложенных в формат, разделенный точками.
Чтобы исправить политику извлечения переменных, показанную выше, вы можете изменить имя переменной
var.color.next, чтобы использовать имя переменнойvar.nextcolor.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{nextcolor}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>
Дополнительная информация
Более подробную информацию можно найти в этой публикации сообщества .
Неверный путьJSONPath
Код ошибки
steps.extractvariables.InvalidJSONPath
Тело ответа об ошибке
{
"fault": {
"faultstring": "Invalid JSON path [path_name] in policy [policy_name].",
"detail": {
"errorcode": "steps.extractvariables.InvalidJSONPath"
}
}
}
Причина
Эта ошибка возникает, если в элементе <JSONPath> политики извлечения переменных используется недопустимый путь JSON. Например, если полезные данные JSON не имеют объекта Name , но вы указываете Name в качестве пути в политике извлечения переменных, возникает эта ошибка.
Диагностика
Определите политику извлечения переменных, в которой произошла ошибка, и недопустимый путь JSON. Оба эти элемента можно найти в элементе
faultstringответа об ошибке. Например, в следующей строке ошибки имя политики —ExtractJSONVariables, а недопустимый путь JSON —$.Name:"faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."В неудавшемся XML-файле политики извлечения переменных убедитесь, что путь JSON, заданный в элементе
<JSONPath>, соответствует пути, указанному в строке ошибки (шаг № 1 выше). Например, следующая политика извлечения переменных указывает путь JSON$.Name, который соответствует тому, что указано в строке ошибки:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.Name</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>Изучите элемент
<Source>и определите, из какой полезной нагрузки JSON вы пытаетесь извлечь переменную. Например, если для элемента<Source>установлено значениеrequest, политика извлекает полезную нагрузку JSON из объекта запроса. Если для него установленоresponse, то это будет объект ответа.В примере политики извлечения переменных, показанном выше, элементу
<Source>присвоено значениеresponse, поэтому переменные извлекаются из полезных данных JSON ответа.<Source>response</Source>Проверьте соответствующие полезные данные JSON (определенные на шаге 3) и проверьте, есть ли у них объект, указанный в элементе
<JSONPath>. Если в полезных данных JSON нет этого объекта, это и есть причина ошибки.В качестве примера предположим, что вы пытаетесь извлечь переменные из следующих полезных данных ответа JSON:
{ "firstName":"John", "lastName":"Doe", "city":"San Jose", "state":"CA" }Поскольку полезные данные ответа JSON не содержат объекта
Name, политика извлечения переменных завершается с ошибкой, и вы получаете код ошибки:steps.extractvariables.InvalidJSONPath.
Разрешение
Убедитесь, что в элементе
<JSONPath>политики извлечения переменных указаны только объекты, являющиеся частью полезных данных JSON, из которых извлекаются переменные.Чтобы исправить приведенный выше пример политики извлечения переменных, вы можете изменить элемент
<JSONPath>, указав один из объектов, доступных в образце полезных данных ответа JSON (например, допустимы объектыfirstNameиlastName):<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.firstName</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>
Выполнение не удалось
Код ошибки
steps.extractvariables.ExecutionFailed
Тело ответа об ошибке
{
"fault": {
"faultstring": "Failed to execute the ExtractVariables: [policy_name]",
"detail": {
"errorcode": "steps.extractvariables.ExecutionFailed"
}
}
}
Возможные причины
Возможные причины этой ошибки:
| Причина | Описание |
| Отсутствуют входные полезные данные | Входные полезные данные (JSON, XML) пусты. |
| Неверный или неверный ввод | Входные данные (JSON, XML и т. д.), переданные в политику, недействительны или имеют неверный формат. |
Причина: отсутствуют входные полезные данные.
Если политика «Извлечение переменных» предполагает извлечение переменных из полезных данных JSON или XML, но содержимое (полезная нагрузка) переменной, указанной в элементе <Source> , пусто, возникает эта ошибка.
Например, если элемент <Source> в политике извлечения переменных установлен как request или response и они должны содержать полезную нагрузку JSON или XML, но эта полезная нагрузка пуста, возникает ошибка.
Диагностика
Определите политику извлечения переменных, в которой произошла ошибка. Эту информацию можно найти в элементе errorstring ответа об ошибке. Например, в следующей строке ошибки имя политики —
ExtractJSONVariables:"faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"Проверьте элемент
<Source>в ошибочном XML-коде Extract Variables и определите тип входных данных, из которых извлекаются переменные. Например, в следующей политике извлечения переменных элемент<Source>установлен наresponseи извлекает переменные из полезных данных XML:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true"> <XMLPayload> <Namespaces/> <Variable name="City" type="string"> <XPath>/city</XPath> </Variable> </XMLPayload> <Source clearPayload="false">response</Source> </ExtractVariables>Убедитесь, что входные данные, анализируемые политикой извлечения переменных, пусты. Если ввод пуст, то это причина ошибки.
В примере политики извлечения переменных, показанном выше, полезные данные ответа (т. е. тело ответа), отправленные внутренним сервером, были пустыми.
Поскольку полезные данные ответа XML пусты, вы получаете код ошибки:
steps.extractvariables.ExecutionFailedЭта ошибка также может возникнуть, если для элемента
<Source>установлено значениеrequest, но в запросе прокси API не передается никакая полезная нагрузка. Например:curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml"Политика «Извлечение переменных» выполняет извлечение XML только в том случае, если заголовок
Content-Typeсообщения имеет значениеapplication/xml,text/xmlилиapplication/*+xml. Вы должны передать заголовок Content-Type какapplication/xml,text/xmlилиapplication/*+xmlесли хотите, чтобы политика извлечения переменных анализировала полезные данные XML-запроса.
Разрешение
Убедитесь, что входные данные, переданные в политику извлечения переменных, действительны и не пусты.
Чтобы устранить проблему с примером политики извлечения переменных, показанным выше, передайте допустимые полезные данные XML. Например:
Создайте файл
city.xmlсо следующим содержимым:<city>Bengaluru</city> <area>Sanjaynagar</area>Выполните вызов API с помощью команды cURL следующим образом:
curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
Причина: неверный или неправильный ввод.
Если политика извлечения переменных анализирует недопустимые или неправильно сформированные входные данные, вы получаете эту ошибку.
Например, если в качестве входных данных для политики извлечения переменных указан следующий недопустимый JSON, вы получите эту ошибку.
[
"args": ["name" : "amar" ]
]
Диагностика
Определите политику извлечения переменных, в которой произошла ошибка. Эту информацию можно найти в элементе
faultstringответа об ошибке. Например, в следующейfaultstringимя политики —ExtractJSONVariables:"faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"Проверьте элемент
<Source>в ошибочном XML-коде Extract Variables и определите тип входных данных, из которых извлекаются переменные. Например, в следующей политике извлечения переменных элемент<Source>настроен наrequestи извлекает переменные из полезных данных JSON:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request</Source> </ExtractVariables>Проверьте, действительны ли входные данные, анализируемые политикой извлечения переменных. Если ввод недействителен или неверен, это и есть причина ошибки.
В примере политики извлечения переменных, показанном выше, в политику извлечения переменных был передан следующий недопустимый JSON.
[ "args": ["name" : "amar" ] ]Вот пример вызова API, показывающий, как был передан запрос:
curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'Полезная нагрузка JSON, переданная в API, недействительна, поскольку она содержит массив с квадратными скобками (
[ ]), поэтому вы получаете код ошибки:steps.extractvariables.ExecutionFailedЭта ошибка также может возникнуть, если для элемента
<Source>установлено значениеresponse, но полезные данные ответа JSON недействительны или имеют неправильный формат.
Разрешение
Убедитесь, что входные данные, переданные в политику извлечения переменных, действительны и не имеют искажений.
Чтобы устранить проблему с примером политики извлечения переменных, описанной выше, передайте действительный запрос полезных данных JSON следующим образом:
{
"args":{
"name":"amar"
}
}
НеаблеТокаст
Код ошибки
steps.extractvariables.UnableToCast
Тело ответа об ошибке
{
"fault": {
"faultstring": "Unable to cast value [value] as [type].",
"detail": {
"errorcode": "steps.extractvariables.UnableToCast"
}
}
}
Причина
Эта ошибка возникает, если политике извлечения переменных не удалось преобразовать извлеченное значение в переменную. Обычно это происходит, если вы пытаетесь установить значение одного типа данных в переменную другого типа данных.
Например, если политика «Извлечение переменной» попытается установить значение, извлеченное из строковой переменной, в целочисленную переменную, вы увидите эту ошибку.
Диагностика
Определите тип данных переменной, к которой политика извлечения переменных пытается выполнить преобразование, но терпит неудачу. Эту информацию можно найти в элементе
faultstringответа об ошибке. Например, в следующейfaultstringтип объекта —BOOLEAN:"faultstring":"Unable to cast value 36.231 as BOOLEAN."Определите политику извлечения переменных, в которой вы пытаетесь установить значение переменной типа, определенного на шаге 1.
Например, следующая политика извлечения переменных извлекает значение из JSONPath
$.latitudeв переменную типаboolean, которая соответствует значению в строке ошибки:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="latitude" type="boolean"> <JSONPath>$.latitude</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">response</Source> </ExtractVariables>Проверьте тип данных извлекаемого значения. Данные могут быть в форме заголовков, путей URI, полезных данных JSON/XML, параметров формы и параметров запроса.
Убедитесь, что тип данных, определенный на шаге №3, и тип данных переменной, которой назначаются данные (определенный на шаге №2), совпадают.
Если тип данных переменных источника и назначения не совпадает, это и есть причина ошибки.
В примере политики извлечения переменных, показанном выше, рассмотрим полезную нагрузку запроса JSON следующим образом:
{ "latitude":36.2312 }Тип данных значения, извлекаемого из
<JSONPath>,'$.latitude', является целым числом, которое присваивается переменной типа данных boolean.Поскольку тип данных извлеченного значения и тип данных переменной, которой присваивается значение, не совпадают, вы получаете код ошибки:
steps.extractvariables.UnableToCast.
Разрешение
Убедитесь, что тип данных извлеченного значения и переменная, которой назначается содержимое, имеют один и тот же тип.
Чтобы исправить пример политики извлечения переменных, вам необходимо изменить тип переменной на Integer:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="latitude" type="integer">
<JSONPath>$.latitude</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response</Source>
</ExtractVariables>
JsonPathParsingFailure
Код ошибки
steps.extractvariables.JsonPathParsingFailure
Тело ответа об ошибке
{
"fault": {
"faultstring": "ExtractVariables [policy_name]: Json path parsing failed for flow variables [variable_name]",
"detail": {
"errorcode": "steps.extractvariables.JsonPathParsingFailure"
}
}
}
Причина
Эта ошибка возникает, когда политика извлечения переменных не может проанализировать путь JSON и извлечь данные из переменной потока, указанной в элементе <Source> . Обычно это происходит, если переменная потока, указанная в элементе <Source> , не существует в текущем потоке.
Например, эта ошибка возникает, если политика извлечения переменных выполняется в потоке ответов и ожидается, что она будет анализировать путь JSON, но элемент <Source> указывает переменную потока request.content , которая не существует в потоке ответов.
Диагностика
Определите политику извлечения переменных, в которой произошла ошибка, и имя переменной потока, в которую не удалось извлечь данные. Оба эти элемента можно найти в элементе errorstring ответа об ошибке. Например, в следующей строке ошибки имя политики —
ExtractVariables-1, а переменная —request.content:"faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for flow variables request.content"В неудавшемся XML-файле политики извлечения переменных убедитесь, что имя переменной, установленной в элементе
<Source>, соответствует имени переменной, указанной в строке ошибки (шаг № 1 выше). Например, следующая политика извлечения переменных определяет переменную с именемrequest.content, которая соответствует значению в строке ошибки:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request.content</Source> </ExtractVariables>Убедитесь, что переменная потока, используемая в элементе
<Source>, определена и доступна в потоке, в котором выполняется политика извлечения переменных.Если переменная:
- вне области действия (недоступно в конкретном потоке, в котором выполняется политика) или
- не может быть решено (не определено)
тогда это причина ошибки.
В качестве примера предположим, что политика ExtractVariables, показанная выше, должна выполняться в потоке ответов. Напомним, что переменная потока
request.contentиспользуется в элементе<Source>политики извлечения переменных. Переменная потокаrequest.contentдоступна только в потоке запросов.Поскольку переменная
responseне существует в потоке запроса, вы получаете код ошибки:steps.extractvariables.JsonPathParsingFailure.
Разрешение
Убедитесь, что переменная потока, используемая в элементе <Source> политики извлечения переменных, доступна в потоке, в котором выполняется политика извлечения переменных.
Например, предположим, что переменная с именем response.content существует в потоке ответов и фактически содержит JSON, который вы хотите извлечь. Чтобы исправить политику извлечения переменных, показанную выше, вы можете изменить элемент <Source> следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="Name" type="string">
<JSONPath>$.args.name</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response.content</Source>
</ExtractVariables>