Estás consultando 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 respuesta de 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 Asignar mensaje es:
- Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política) o
- no se puede resolver (no está definido)
Por ejemplo, este error se produce si la política Asignar mensaje se ejecuta en el flujo de la solicitud, pero el atributo source
del elemento <Copy>
se asigna a la variable response
o error
, o a cualquier otra variable personalizada que no exista en el flujo de la solicitud.
Diagnóstico
Identifica la política de asignación de mensajes en la que se ha producido 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
faultstring
, el nombre de la política esgoogleBook
y la variable esvar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
En el XML de la política de asignación de mensajes fallida, comprueba que el nombre de la variable utilizada coincide con el nombre de la variable identificada en la cadena de error (paso 1 anterior). Por ejemplo, la siguiente política asigna al atributo de origen del elemento
<Copy>
una variable llamadavar
, que coincide con lo que hay enfaultstring
:<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 está ejecutando la política Assign Message.
Si la variable es:
- Fuera del ámbito (no disponible en el flujo específico en el que se está ejecutando la política) o
- no se puede resolver (no está definido)
entonces, esa es la causa del error.
Por ejemplo, supongamos que la política Assign Message mostrada arriba se ejecuta en el flujo de la solicitud. Comprueba si la variable
var
está definida en alguna de las políticas que se ejecutan antes de la política Assign Message en el flujo de la solicitud. Si la variable no se ha definido, recibirás el código de error:steps.assignmessage.UnresolvedVariable
Resolució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 ejecuta la política Asignar mensaje.
Para corregir la política de ejemplo que se muestra arriba, puede modificar el atributo de origen del elemento <Copy>
para que sea la variable de solicitud o cualquier otra variable personalizada de tipo mensaje que exista en el flujo de 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 respuesta de error
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
Causa
Este error se produce si el atributo source
del elemento <Copy>
se asigna a una variable que no es del tipo message.
Las variables de tipo de mensaje representan solicitudes y respuestas HTTP completas. Las variables de flujo integradas request
, response
y message
son de tipo mensaje. Para obtener más información sobre las variables de mensaje, consulta la referencia de variables.
Diagnóstico
Identifica la política de asignación de mensajes en la que se ha producido 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 siguientefaultstring
, 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 XML de la política de asignación de mensajes que ha fallado, comprueba que el nombre de la variable definida en el elemento
<Copy>
coincida con el nombre de la variable identificada en la cadena de error (paso 1 anterior). Por ejemplo, la siguiente política asigna a un atributo de origen una variable llamadaPostalCode
, que coincide con lo que hay enfaultstring
:<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 mensaje o no:
- Busca el código en el paquete del proxy de API donde se definió la variable por primera vez.
- Una vez que sepas en qué política se define y se rellena la variable por primera vez, debes determinar el tipo de esa variable de la siguiente manera:
- Compruebe el valor del atributo type (si está presente).
- Si no se incluye el atributo type, se considera que la variable es una cadena.
- Si el tipo de la variable no es un mensaje (por ejemplo, una cadena), esa es la causa del error. Puede consultar información sobre las variables comunes y sus tipos en la referencia de variables.
Por ejemplo, fíjate en la variable PostalCode del XML anterior. Se le asigna el valor de la variable de flujo
request.queryparam.postalcode
en el elemento<AssignVariable>
. Este valor es una cadena, ya que no hay ningún atributo de tipo en la asignación de variables.Ahora, recuerda que la variable PostalCode se usa en el elemento
<Copy>
de la política Assign Message:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
Como PostalCode no es de tipo message (en este ejemplo, es una cadena), recibes el código de error:
steps.assignmessage.VariableOfNonMsgType
Resolución
Asegúrate de que el atributo source
del elemento <Copy>
de la política Assign Message fallida se haya definido en una variable de flujo de tipo message que exista.
Para corregir la política, puede modificar el atributo source
del elemento <Copy>
para especificar una variable de tipo mensaje. Por ejemplo, si la política Assign Message se debe ejecutar en el flujo de solicitudes, puede usar la variable de tipo de mensaje request
o cualquier otra variable personalizada de tipo message.
<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>