Вы просматриваете документацию 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>