Вы просматриваете документацию по 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 of type Message"В XML-файле политики сообщений, который не удалось назначить, убедитесь, что название переменной, заданной в элементе
<Copy>, совпадает с названием переменной, указанным в строке ошибки (шаг 1 выше). Например, следующая политика присваивает атрибут источника переменной с названиемPostalCode, которое совпадает с названием вfaultstring:<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> <Copy source="PostalCode"> <QueryParams> <QueryParam name="q" /> </QueryParams> </Copy> </AssignMessage>Определите, является ли переменная сообщением:
- Найдите в пакете прокси API код, в котором впервые была определена переменная.
- Определив, в каких правилах переменная задается и заполняется первой, определите ее тип, выполнив следующие действия:
- Проверьте значение атрибута type (если он есть).
- Если атрибут type отсутствует, переменная считается строкой.
- Если тип переменной не является сообщением (например, это строка), то это и есть причина ошибки. Информацию о распространенных переменных и их типах можно найти в справочнике по переменным.
Например, посмотрите на переменную PostalCode в приведенном выше XML-коде. Ему присваивается значение переменной потока
request.queryparam.postalcodeв элементе<AssignVariable>. Это строка, поскольку в присваивании переменной отсутствует атрибут типа.Напомним, что переменная PostalCode используется в элементе
<Copy>правила "Назначить сообщение":<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>Поскольку PostalCode не относится к типу message (в этом примере это строка), вы получите код ошибки:
steps.assignmessage.VariableOfNonMsgType
Разрешение
Убедитесь, что атрибут source в элементе <Copy> в правиле "Назначить сообщение" с ошибкой задан как существующая переменная потока типа message.
Чтобы исправить нарушение, измените атрибут source в элементе <Copy>, указав переменную типа message. Например, если политика Assign Message должна выполняться в потоке запроса, можно использовать переменную типа сообщения request или любую другую специальную переменную типа сообщения.
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
<Copy source="request">
<QueryParams>
<QueryParam name="PostalCode" />
</QueryParams>
</Copy>
</AssignMessage>