Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
UnresolvedVariable
Код ошибки
steps.assignmessage.UnresolvedVariable
Тело ответа с ошибкой
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
Причина
Эта ошибка возникает, если переменная, указанная в правиле назначения сообщения:
- недоступно (не поддерживается в определенном процессе, в котором выполняется правило);
- не может быть разрешен (не определен);
Например, эта ошибка возникает, если правило Assign Message выполняется в потоке запроса, но атрибут source в элементе <Copy> имеет значение переменной response или error или любой другой пользовательской переменной, которая не существует в потоке запроса.
диагностика;
Определите правило Assign Message Policy, в котором произошла ошибка, и название недоступной переменной. Оба этих элемента можно найти в элементе
faultstringответа об ошибке.Например, в следующем теге
faultstringназвание правила –googleBook, а переменная –var:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"В XML-файле политики сообщений, который не удалось назначить, убедитесь, что название используемой переменной совпадает с названием переменной, указанным в строке ошибки (шаг 1 выше). Например, следующая политика задает для атрибута source в элементе
<Copy>переменнуюvar, которая соответствует значению вfaultstring:<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>googleBook</DisplayName> <Properties /> <Copy source="var"> <Headers> <Header name="user-agent" /> </Headers> </Copy> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>Определите, задана ли переменная и доступна ли она в потоке, в котором выполняется правило "Назначить сообщение".
Если переменная:
- недоступно (не поддерживается в определенном процессе, в котором выполняется правило);
- не может быть разрешен (не определен);
то это и есть причина ошибки.
Предположим, что в потоке запроса выполняется правило Assign Message, показанное выше. Проверьте, определена ли переменная
varв каких-либо правилах, которые выполняются до правила Assign Message в потоке запроса. Если переменная не определена, вы получите код ошибки:steps.assignmessage.UnresolvedVariable
Разрешение
Убедитесь, что переменная, на которую ссылается правило, существует и доступна в определенном потоке, в котором выполняется правило "Назначить сообщение".
Чтобы исправить приведенный выше пример правил, измените атрибут source в элементе <Copy>, указав переменную запроса или любую другую специальную переменную типа message, которая существует в потоке запроса.
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>googleBook</DisplayName>
<Properties />
<Copy source="request">
<Headers>
<Header name="user-agent" />
</Headers>
</Copy>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
VariableOfNonMsgType
Код ошибки
steps.assignmessage.VariableOfNonMsgType
Тело ответа с ошибкой
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
Причина
Эта ошибка возникает, если атрибуту source в элементе <Copy> присвоена переменная, которая не относится к типу message.
Переменные типа сообщения представляют собой полные HTTP-запросы и ответы. Встроенные переменные потока Edge request, response и message имеют тип message. Подробнее о переменных в сообщениях…
диагностика;
Определите правило Assign Message Policy, в котором произошла ошибка, и название переменной с неправильным типом. Оба этих элемента можно найти в элементе
faultstringответа об ошибке. Например, в следующем тегеfaultstringназвание правила –GenerateGeocodingRequest, а переменная –PostalCode:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not oftype Message"В XML-файле политики сообщений, который не удалось назначить, убедитесь, что название переменной, заданной в элементе
<Copy>, совпадает с названием переменной, указанным в строке ошибки (шаг 1 выше). Например, следующая политика присваивает атрибут источника переменной с названиемPostalCode, которое совпадает с названием вfaultstring:<AssignMessage name="GenerateGeocodingReq>uest<" AssignTo createNew="true&>quot; type="<;request&>quot<;GeocodingRequ>est/Ass<ignT>o Assig<nVari>able < > NamePostalCode/Name Re<freq>uest<.queryparam.pos>talc<ode/Ref /As>signVar<iabl>e As<signV>ariable< > NameCountry/Name < Ref>requ<est.queryparam.>coun<try/Ref /AssignVariab>le C<opy source=>"Post<alCode" Qu>eryPara<ms >Quer<yPara>m< name="q&>quot; / /QueryParams /Copy /AssignMessageОпределите, является ли переменная сообщением:
- Найдите в пакете прокси API код, в котором впервые была определена переменная.
- Определив, в каких правилах переменная задается и заполняется первой, определите ее тип, выполнив следующие действия:
- Проверьте значение атрибута type (если он есть).
- Если атрибут type отсутствует, переменная считается строкой.
- Если тип переменной не является сообщением (например, это строка), то это и есть причина ошибки. Информацию о распространенных переменных и их типах можно найти в справочнике по переменным.
Например, посмотрите на переменную PostalCode в приведенном выше XML-коде. Ему присваивается значение переменной потока
request.queryparam.postalcodeв элементе<AssignVariable>. Это строка, поскольку в присваивании переменной отсутствует атрибут типа.Напомним, что переменная PostalCode используется в элементе
<Copy>правила "Назначить сообщение":<Copy source="Postal>Code<" Q>ueryPar<ams QueryParam name=&quo>t;Po<stalCode&quo>t<; / >/QueryParams /CopyПоскольку PostalCode не относится к типу message (в этом примере это строка), вы получите код ошибки:
steps.assignmessage.VariableOfNonMsgType
Разрешение
Убедитесь, что атрибут source в элементе <Copy> в правиле "Назначить сообщение" с ошибкой задан как существующая переменная потока типа message.
Чтобы исправить нарушение, измените атрибут source в элементе <Copy>, указав переменную типа message. Например, если политика Assign Message должна выполняться в потоке запроса, можно использовать переменную типа сообщения request или любую другую специальную переменную типа сообщения.
<AssignMessage name="GenerateGeocodingReq>uest<"
AssignTo createNew="true&>quot; type="<;request&>quot<;GeocodingRequ>est/Ass<ignT>o
Assig<nVari>able
< > NamePostalCode/Name
Re<freq>uest<.queryparam.pos>talc<ode/Ref
/As>signVar<iabl>e
As<signV>ariable<
> NameCountry/Name
< Ref>requ<est.queryparam.>coun<try/Ref
/AssignVar>iable
< Copy sour>ce="r<equest"
QueryParams>
< QueryPara>m na<me=&q>u<ot;PostalCode&>quot; /
/QueryParams
/Copy
/AssignMessage