Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.
UnresolvedVariable
Código de error
steps.assignmessage.UnresolvedVariable
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
Causa
Este error se produce si una variable especificada en la política AssignMessage es una de las siguientes:
- fuera de alcance (no disponible en el flujo específico en el que se ejecuta la política)
- no se puede resolver (no está definido)
Por ejemplo, este error ocurre si la política de asignación de mensajes se ejecuta en el flujo de solicitudes, pero el atributo source
del elemento <Copy>
se configura como la variable response
o error
, o cualquier otra variable personalizada que no existe en el flujo de solicitudes.
Diagnóstico
Identifica la política de asignación de mensajes en la que se generó el error y el nombre de la variable que no está disponible. Puedes encontrar ambos elementos en el elemento
faultstring
de la respuesta de error.Por ejemplo, en el siguiente valor
faultstring
, el nombre de la política esgoogleBook
y la variable esvar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
En el archivo XML de la política de asignación de mensajes, verifica que el nombre de la variable usada coincida con el nombre de variable identificado en la string con errores (paso 1 anterior). Por ejemplo, en la siguiente política, se establece el atributo de origen en el elemento
<Copy>
en una variable llamadavar
, que coincide con lo que hay en lafaultstring
:<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>
Determina si la variable está definida y disponible en el flujo en el que se ejecuta la política de protección contra el aumento de tráfico.
Verifica si la variable tiene una de las siguientes características:
- fuera de alcance (no disponible en el flujo específico en el que se ejecuta la política) o
- no se puede resolver (no está definido)
entonces esa es la causa del error.
A modo de ejemplo, supongamos que la política de asignación de mensajes que se muestra arriba se ejecuta en el flujo de solicitudes. Verifica si la variable
var
se define en cualquiera de las políticas que se ejecutan antes de la política de asignación de mensajes en el flujo de solicitudes. Si no se definió la variable, recibirá el código de error:steps.assignmessage.UnresolvedVariable
Solución
Asegúrate de que la variable a la que se hace referencia en la política exista y esté disponible en el flujo específico, en el que se ejecutará la política de asignación de mensajes.
Si quieres corregir la política de ejemplo que se muestra arriba, puedes modificar el atributo de origen en el elemento <Copy>
para que sea la variable de solicitud o cualquier otra variable personalizada de tipo de mensaje que exista en el flujo de la solicitud.
<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
Código de error
steps.assignmessage.VariableOfNonMsgType
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
Causa
Este error ocurre si el atributo source
del elemento <Copy>
se configuró como una variable que no es del tipo message.
Las variables del tipo de mensaje representan respuestas y solicitudes HTTP completas. Las variables de flujo integradas request
, response
y message
son de tipo de mensaje. Para obtener más información acerca de las variables de mensaje, consulta la Referencia de lasvariables.
Diagnóstico
Identifica la política de asignación de mensajes en la que se generó el error y el nombre de la variable cuyo tipo es incorrecto. Puedes encontrar ambos elementos en el elemento
faultstring
de la respuesta de error. Por ejemplo, en el siguiente valorfaultstring
, el nombre de la política esGenerateGeocodingRequest
y la variable esPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
En el archivo XML de la política de asignación mensajes con errores, verifica que el nombre de la variable establecida en el elemento
<Copy>
coincida con el nombre de la variable identificado en la string con errores (paso 1 anterior). Por ejemplo, en la siguiente política, se establece un atributo de origen en una variable llamadaPostalCode
, que coincide con lo que hay en lafaultstring
:<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>
Determina si esta variable es de tipo de mensaje o no:
- Localiza el código dentro del paquete del proxy de API, en el que la variable se definió primero.
- Una vez que determines la política en la que se define y propaga la variable primero, debes determinar el tipo de esa variable de la siguiente manera:
- Comprueba el valor del atributo del tipo (si está presente).
- Si el atributo de tipo no está presente, la variable se considera una string.
- Si el tipo de la variable no es de mensaje (como una string), esta es la causa del error. Puedes obtener información sobre las variables comunes y sus tipos en la referencia de variables.
Por ejemplo, observa la variable PostalCode en la XML anterior. Se le asigna el valor de la variable de flujo
request.queryparam.postalcode
en el elemento<AssignVariable>
. Este valor es una string, porque no hay un tipo de atributo presente en la asignación de la variable.Ahora, recuerda que la variable PostalCode se usa en el elemento
<Copy>
de la política de asignación de mensajes:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
Debido a que PostalCode no es de tipo de mensaje (en este ejemplo, es una string), recibes el código de error:
steps.assignmessage.VariableOfNonMsgType
Solución
Asegúrate de que el atributo source
del elemento <Copy>
de la política de asignación de mensajes con errores tenga una variable de flujo de tipo mensaje que existe.
Para corregir la política, puedes modificar el atributo source
en el elemento <Copy>
a fin de especificar una variable que sea de tipo de mensaje. Por ejemplo, si suponemos que la política de asignación de mensajes se ejecutará en el flujo de solicitudes, puedes usar la variable de tipo de mensaje request
o cualquier otra variable personalizada de tipo de mensaje.
<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>