Estás viendo la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.
RequestVariableNotMessageType
Código de error
steps.servicecallout.RequestVariableNotMessageType
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "ServiceCallout[POLICY_NAME]: request variable [VARIABLE_NAME] value is not of type Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotMessageType" } } }
Causa
Este error se produce si una variable especificada en el elemento <Request>
de la política de ServiceCallout no es del tipo message
. Si la variable es una string o cualquier otro tipo que no sea de mensaje, verás este error.
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 message
.
Diagnóstico
Identifica la política de texto destacado del servicio en la que se produjo 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 esExecuteGeocodingRequest
y la variable esPostalCode
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
En el archivo XML de la política de texto destacado del servicio con error, verifica que el nombre de la variable configurada en el elemento
<Request>
coincida con el nombre de la variable identificado en la string con error (el paso 1 anterior). Por ejemplo, en la siguiente política, se especifica una variable de solicitud llamadaPostalCode
, que coincide con el contenido defaultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="PostalCode"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
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.
- En la mayoría de los casos, verás que la variable problemática se crea y se propaga en otra política que se ejecuta antes que la política de texto destacado del servicio. Por ejemplo, la política de asignación de mensajes se usa por lo general para crear y propagar variables en un flujo de proxy de API.
- 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
type
(si está presente). - Si el atributo
type
no está presente, se considera que la variable es una string.
- Comprueba el valor del atributo
- 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.
A modo de ejemplo, supongamos que la variable PostalCode
a la que se hace referencia en la política de texto destacado del servicio se creó en la siguiente política de asignación de mensajes. Ten en cuenta que PostalCode
tiene asignado el valor de la variable de flujo request.queryparam.postalcode
. Este valor es una string, porque no hay un atributo type
presente en la asignación de la variable.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
Ahora, recuerda que la variable PostalCode
se usa en el elemento <Request>
de la política de texto destacado del servicio:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="PostalCode"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Debido a que PostalCode
no es de tipo de mensaje (en este ejemplo, es una string), recibes el código de error: steps.servicecallout.RequestVariableNotMessageType
.
Solución
Asegúrate de que la variable establecida en el elemento <Request>
de la política con errores de ServiceCallout sea una variable de flujo de tipo message
que exista o, de manera alternativa, puedes crear una nueva variable de tipo de mensaje directamente en la política de ServiceCallout (como se explica en la Política de ServiceCallout) y úsala.
Si deseas corregir la política, debes modificar el elemento <Request>
para especificar una variable nueva o existente que sea de tipo de mensaje. Por ejemplo, la variable GeocodingRequest
que se configuró en la política de asignación de mensajes es de tipo de mensaje, y funcionará bien en la política de texto destacado del servicio. Por ejemplo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
RequestVariableNotRequestMessageType
Código de error
steps.servicecallout.RequestVariableNotRequestMessageType
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType" } } }
Causa
Este error se produce si una variable especificada en el elemento <Request>
de la política de ServiceCallout no es del tipo message
. Si la variable es una string o es de tipo de mensaje de respuestao de cualquier otro tipo, verás este error.
La variable de tipo message
representa respuestas y solicitudes HTTP completas. Las variables de flujo integradas request
, response
y message
son de tipo message
.
Diagnóstico
Identifica la política de texto destacado del servicio en la que se produjo 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 esExecuteGeocodingRequest
y la variable esvar_response
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"
En el archivo XML de la política de texto destacado del servicio con error, verifica que el nombre de la variable configurada en el elemento
<Request>
coincida con el nombre de la variable identificado en la string con error (el paso 1 anterior). Por ejemplo, en la siguiente política, se especifica una variable de solicitud llamadavar_response
, que coincide con el contenido defaultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="var_response"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
Determina si la variable es de tipo de mensaje de solicitud o no:
- Localiza el código dentro del paquete del proxy de API, en el que la variable se definió primero.
- En la mayoría de los casos, verás que la variable problemática se crea y se propaga en otra política que se ejecuta antes que la política de texto destacado del servicio. Por ejemplo, la política de asignación de mensajes se usa por lo general para crear y propagar variables en un flujo de proxy de API.
- 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
type
(si está presente). - Si el atributo
type
no está presente, se considera que la variable es una string.
- Comprueba el valor del atributo
- Si el tipo de la variable no es de mensaje de solicitud, esta es la causa del error. Puedes obtener información sobre las variables comunes y sus tipos en la referencia de variables.
A modo de ejemplo, supongamos que la variable var_response
a la que se hace referencia en la política de texto destacado del servicio se creó en la siguiente política de asignación de mensajes. Ten en cuenta que var_response
recibe el tipo response
. Por lo tanto, el tipo de la variable var_response
es de mensaje de respuesta.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignTo createNew="true" type="response">var_response</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
Recuerda que la variable var_response
se usa en el elemento <Request>
de la política de texto destacado del servicio.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="var_response"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Debido a que var_response
no es de tipo de mensaje de solicitud (su tipo es de mensaje de respuesta), recibes el código de error: steps.servicecallout.RequestVariableNotRequestMessageType
.
Solución
Asegúrate de que la variable establecida en el elemento <Request>
de la política con errores de ServiceCallout sea una variable de tipo message
que exista o, de manera alternativa, puedes crear una nueva variable de tipo de mensaje de solicitud directamente en la política de ServiceCallout (como se explica en la política de ServiceCallout ) y úsala.
Si deseas corregir la política, debes modificar el elemento <Request>
para especificar una variable existente o nueva que sea del tipo de mensaje de solicitud. Esta funcionará en la política de texto destacado del servicio. Por ejemplo:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
ExecutionFailed
Código de error
steps.servicecallout.ExecutionFailed
Cuerpo de la respuesta de error
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
o
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
Causas posibles
Las siguientes son las posibles causas de este error:
Causa | Descripción |
La URL no es válida o tiene errores de formato | La URL de destino en la política de texto destacado del servicio tiene errores de formato o un nombre de host que es no es válido o es inaccesible. |
Error del servidor de backend | El servidor de backend muestra una respuesta de error de 4XX o 5XX. |
Causa: La URL no es válida o tiene errores de formato
La URL de destino en la política de texto destacado del servicio tiene errores de formato o un nombre de host que es no es válido o es inaccesible.
Diagnóstico
Identifica la política de texto destacado del servicio que causó el error. El nombre de la política aparece en el elemento
faultstring
de la respuesta de error. Por ejemplo, en el siguiente campofaultstring
, el nombre de la política de texto destacado del servicio con errores esExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
En la política de texto destacado del servicio con error, examina el elemento
<URL>
. Si tiene errores de formato o un nombre de host que no es válido o es inaccesible, esta es la causa del error. Por ejemplo, la siguiente política de texto destacado del servicio especifica una<URL>
que no es válida:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://</URL> </HTTPTargetConnection> </ServiceCallout>
El elemento
<URL>
solo tiene el protocolohttp://
, pero no tiene un nombre de host válido. Por lo tanto, la política de texto destacado del servicio falla con este error:Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable
.
Solución
Asegúrate de que el elemento <URL>
de la política de texto destacado del servicio con errorestenga una URL válida con un nombre de host accesible.
Si deseas corregir la política de texto destacado del servicio que se muestra arriba, puedes modificar el elemento <URL>
para especificar una URL válida:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
Causa: Error del servidor de backend
El servidor de backend muestra una respuesta de error de 4XX o 5XX.
Diagnóstico
Identifica la política de texto destacado del servicio que causó el error. El nombre de la política aparece en el elemento
faultstring
de la respuesta de error. Por ejemplo, en el siguiente campofaultstring
, el nombre de la política de texto destacado del servicio con errores esExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
Examina
faultstring
en el cuerpo de la respuesta de error y verifica si se enumera algún código de respuesta de 4XX o 5XX enReason
. Por ejemplo, la siguiente string con errores indica con claridad que un servidor de backend mostró un código de respuesta 502:"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
Solución
Una vez que determines el código de respuesta de error, puedes solucionar este problema del mismo modo que lo harías con cualquier error 4XX o 5XX.