Estás viendo la documentación de Apigee Edge.
Ve a la
documentación de Apigee X. info
SourceMessageNotAvailable
Código de error
steps.extractvariables.SourceMessageNotAvailable
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]", "detail": { "errorcode": "steps.extractvariables.SourceMessageNotAvailable" } } }
Causa
Este error ocurre si la variable message especificada en el elemento <Source>
de la política de Extraer variables es una de las siguientes:
- 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)
Por ejemplo, este error ocurre si la política de extracción de variables se ejecuta en el flujo de solicitud, pero el elemento <Source>
se configura en la variable response
o error
, que no existe en el flujo de la solicitud.
Diagnóstico
Identifica la política de extracción de variables en la que se produjo 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 la siguiente string del error, el nombre de la política esExtractVariables-1
y la variable esresponse
:"faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"
En el archivo XML de la política de extracción de variables con errores, verifica que el nombre de la variable establecida en el elemento coincida con el nombre de la variable identificado en la string del error (paso n.º 1 anterior). Por ejemplo, en la siguiente política de extracción de variables, se especifica una variable llamada
response
en el elemento, que coincide con lo que aparece en la string del error:<ExtractVariables name="ExtractVariables-1"> <Source>response</Source> <URIPath> <Pattern ignoreCase="true">/a/{pathSeg}</Pattern> </URIPath> <VariablePrefix>urirequest</VariablePrefix> </ExtractVariables>
Determina si la variable usada en el elemento
<Source>
está definida y disponible en el flujo en el que se ejecuta la política de extracción de variables.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 extracción de variables que se muestra antes se ejecuta en el flujo de solicitud. Recuerda que la variable
response
se usa en el elemento<Source>
de la política de extracción de variables. La variableresponse
solo está disponible en el flujo de respuesta.Dado que la variable
response
no existe en el flujo de solicitud, recibes el código de error:steps.extractvariables.SourceMessageNotAvailable
.
Solución
Asegúrate de que la variable establecida en el elemento <Source>
de la política de extracción de variables con errores se defina y exista en el flujo en el que se ejecuta la política.
Para corregir la política de extracción de variables de ejemplo que se muestra antes, puedes modificar el elemento <Source>
a fin de usar la variable request
tal como se encuentra en el flujo de la solicitud.
<ExtractVariables name="ExtractVariables-1">
<Source>request</Source>
<URIPath>
<Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
</URIPath>
<VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>
SetVariableFailed
Código de error
steps.extractvariables.SetVariableFailed
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]", "detail": { "errorcode": "steps.extractvariables.SetVariableFailed" } } }
Causa
Este error se produce si la política de extracción de variables no pudo establecer el valor en una variable. Por lo general, esto ocurre si intentas asignar valores a múltiples variables cuyos nombres comienzan con las mismas palabras en un formato separado por puntos y comas.
Por ejemplo, supongamos que creas o asignas un valor a una variable var.color
. En este caso, color
se asigna como un nodo de objeto. Si intentas asignar un valor a otra variable var.color.next
, fallará, debido a que color
ya está asignado y no podrás asignarle otra variable.
Diagnóstico
Identifica la política de extracción de variables en la que se produjo el error y el nombre de la variable para la que no se pudo establecer el valor. Puedes encontrar ambos elementos en el elemento
faultstring
de la respuesta de error. Por ejemplo, en la siguiente string del error, el nombre de la política esExtractColors
y la variable esvar.color.next
:"faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"
En el archivo XML de la política de extracción de variables con errores, verifica que el nombre de la variable coincida con el nombre de la variable identificado en la string del error (paso 1 anterior). Por ejemplo, la siguiente política intenta asignar un valor de un parámetro de consulta de solicitud a una variable llamada
var.color.next
(el valor que aparece como string del error):<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{color.next}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>
Examina todos los nombres de variables usados en la política de extracción de variables con errores. Si asignaste un valor a otra variable cuyo nombre comienza con el mismo nombre que el nombre de la variable identificado en la string con errores (paso 1 anterior), esa es la causa del error.
En la política de extracción de variables de ejemplo que se muestra arriba, ten en cuenta lo siguiente:
- El valor del parámetro de consulta llamado
color
se asigna primero a una variablevar.color
(Nota:var
es el prefijo de todas las variables como se establece en el elemento<VariablePrefix>
) - En la siguiente asignación, el valor del parámetro de búsqueda
nextcolor
se asigna a otra variablevar.color.next
. - Como el
var.color
ya está asignado, la política de extracción de variables no puede asignar otra variable anidadavar.color.next
. Por lo tanto, recibirás el siguiente código de error:steps.extractvariables.SetVariableFailed
- El valor del parámetro de consulta llamado
Solución
Asegúrate de que no tengas varios nombres de variables que comiencen con las mismas palabras que están anidadas en formatos separados por puntos.
Para corregir la política de extracción de variables que se muestra arriba, puedes modificar el nombre de la variable
var.color.next
para usarvar.nextcolor.
.<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractColors"> <DisplayName>ExtractColors</DisplayName> <Source>request</Source> <QueryParam name="color"> <Pattern ignoreCase="true">{color}</Pattern> </QueryParam> <QueryParam name="nextcolor"> <Pattern ignoreCase="true">{nextcolor}</Pattern> </QueryParam> <VariablePrefix>var</VariablePrefix> </ExtractVariables>
Más información
Para obtener más información, consulta esta publicación de la Comunidad.
InvalidJSONPath
Código de error
steps.extractvariables.InvalidJSONPath
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "Invalid JSON path [path_name] in policy [policy_name].", "detail": { "errorcode": "steps.extractvariables.InvalidJSONPath" } } }
Causa
Este error ocurre si se usa una ruta de acceso JSON no válida en el elemento <JSONPath>
de la política de extracción de variables. Por ejemplo, si una carga útil JSON no tiene el objeto Name
, pero especificas Name
como la ruta en la política de extracción de variables, se produce este error.
Diagnóstico
Identifica la política de extracción de variables en la que se produjo el error y la ruta JSON no válida. Puedes encontrar ambos elementos en el elemento
faultstring
de la respuesta de error. Por ejemplo, en la siguiente string del error, el nombre de la política esExtractJSONVariables
y la ruta JSON no válida es$.Name
:"faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."
En el archivo XML de la política de extracción de variables con errores, verifica que la ruta de acceso JSON establecida en el elemento
<JSONPath>
coincida con la ruta identificada en la string del error (paso 1 anterior). Por ejemplo, la siguiente política de extracción de variables contiene la ruta de acceso JSON$.Name
, que coincide con la información de la string del error:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.Name</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>
Examina el elemento
<Source>
y determina desde qué carga útil JSON intentas extraer la variable. Por ejemplo, si el elemento<Source>
se configuró comorequest
, la política extrae la carga útil de JSON del objeto de la solicitud. Si se configura comoresponse
, sería un objeto de respuesta.En la política de extracción de variables de ejemplo que se muestra arriba, el elemento
<Source>
se configura comoresponse
, por lo que las variables se extraen de la carga útil JSON de la respuesta.<Source>response</Source>
Examina la carga útil de JSON adecuada (determinada del paso 3) y valida si tiene el objeto especificado en el elemento
<JSONPath>
. Si la carga útil JSON no tiene ese objeto, esa es la causa del error.Como ejemplo, considera que intentas extraer variables de la siguiente carga útil de respuesta de JSON:
{ "firstName":"John", "lastName":"Doe", "city":"San Jose", "state":"CA" }
Debido a que la carga útil de respuesta de JSON no tiene el objeto
Name
, la política extracción de variables muestra el error y recibes el código de error:steps.extractvariables.InvalidJSONPath
.
Solución
Asegúrate de que solo los objetos que forman parte de la carga útil de JSON desde las que se extraen las variables se especifiquen en el elemento
<JSONPath>
de la política de extracción de variables.Para corregir la política de extracción de variables de ejemplo que se muestra arriba, puedes modificar el elemento
<JSONPath>
a fin de especificar uno de los objetos disponibles en la carga útil de respuesta de JSON de muestra (por ejemplo, los objetosfirstName
ylastName
son válidos):<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>response</Source> <JSONPayload> <Variable name="name" type="string"> <JSONPath>$.firstName</JSONPath> </Variable> </JSONPayload> <VariablePrefix>employee</VariablePrefix> </ExtractVariables>
ExecutionFailed
Código de error
steps.extractvariables.ExecutionFailed
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "Failed to execute the ExtractVariables: [policy_name]", "detail": { "errorcode": "steps.extractvariables.ExecutionFailed" } } }
Causas posibles
Las siguientes son las posibles causas de este error:
Causa | Descripción |
Carga útil de entrada faltante | La carga útil de entrada (JSON, XML) está vacía. |
Entrada no válida o con formato incorrecto | La entrada (JSON, XML, etc.) pasada a la política no es válida o presenta errores de formato. |
Causa: Falta la carga útil de entrada
Si se supone que la política de extracción de variables extrae las variables de una carga útil JSON o XML, pero el contenido (carga útil) de la variable especificada en el elemento <Source>
está vacío, entonces, se produce este error.
Por ejemplo, si el elemento <Source>
de la política Extraer variables se configura como request
o response
y se supone que contiene o carga útil JSON o XML, pero la carga útil está vacía, se produce el error.
Diagnóstico
Identifica la política de extracción de variables en la que se produjo el error. Puedes encontrar esta información en el elemento de la string del error de la respuesta de error. Por ejemplo, en la siguiente string del error, el nombre de la política es
ExtractJSONVariables
:"faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"
Examina el elemento
<Source>
en el archivo XML de extracción de variables que se muestra y determina el tipo de entrada a partir de la cual se extraen las variables. Por ejemplo, la siguiente política de extracción de variables tiene el elemento<Source>
establecido enresponse
y extrae las variables de la carga útil XML:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true"> <XMLPayload> <Namespaces/> <Variable name="City" type="string"> <XPath>/city</XPath> </Variable> </XMLPayload> <Source clearPayload="false">response</Source> </ExtractVariables>
Comprueba si la entrada que se analiza en la política de extracción de variables está vacía. Si la entrada está vacía, esa es la causa del error.
En la política de extracción de variables de ejemplo que se mostró antes, la carga útil de la respuesta (es decir, el cuerpo de la respuesta) que envió el servidor de backend estaba vacía.
Dado que la carga útil de respuesta XML está vacía, recibirás el código de error:
steps.extractvariables.ExecutionFailed
Este error también puede ocurrir si el elemento
<Source>
se configuró comorequest
, pero no se pasa ninguna carga útil en la solicitud del proxy de API. Por ejemplo:curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml"
La política de extracción de variables solo realiza la extracción XML cuando el encabezado
Content-Type
del mensaje esapplication/xml
,text/xml
oapplication/*+xml
. Debes pasar el encabezado de tipo de contenido comoapplication/xml
,text/xml
oapplication/*+xml
si quieres que la política de extracción de variables tenga la posibilidad de analizar una carga útil de solicitud XML.
Solución
Asegúrate de que la entrada que se pasó a la política de extracción de variables sea válida y que no esté vacía.
Para solucionar el problema con la política de extracción de variables de ejemplo que se muestra arriba, pasa una carga útil de XML válida. Por ejemplo:
Crea un archivo llamado
city.xml
con el siguiente contenido:<city>Bengaluru</city> <area>Sanjaynagar</area>
Realiza la llamada a la API con un comando cURL de la siguiente manera:
curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
Causa: Entrada no válida o con formato incorrecto
Si la política de extracción de variables analiza una entrada que no es válida o tiene un formato incorrecto, verás este error.
Por ejemplo, si se proporciona el siguiente JSON no válido como entrada a la política de extracción de variables, aparecerá este error.
[
"args": ["name" : "amar" ]
]
Diagnóstico
Identifica la política de extracción de variables en la que se produjo el error. Puedes encontrar esta información en el elemento
faultstring
de la respuesta de error. Por ejemplo, en el siguientefaultstring
, el nombre de la política esExtractJSONVariables
:"faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"
Examina el elemento
<Source>
en el archivo XML de extracción de variables que se muestra y determina el tipo de entrada a partir de la cual se extraen las variables. Por ejemplo, la siguiente política de extracción de variables tiene el elemento<Source>
configurado comorequest
y extrae las variables de la carga útil de JSON:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request</Source> </ExtractVariables>
Comprueba si la entrada que se analiza en la política de extracción de variables es válida. Si la entrada no es válida o incorrecto, esa es la causa del error.
En el ejemplo de la política de extracción de variables que se mostró antes, se pasó el siguiente JSON no válido a la política de extracción de variables
[ "args": ["name" : "amar" ] ]
A continuación, la llamada a la API de muestra que muestra cómo se pasó la solicitud:
curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
La carga útil de JSON que se pasa a la API no es válida, ya que contiene un arreglo con corchetes (
[ ]
). Por lo tanto, recibes el código de error:steps.extractvariables.ExecutionFailed
Este error también puede ocurrir si el elemento
<Source>
se configuró comoresponse
, pero la carga útil de la respuesta JSON no es válida o presenta errores de formato.
Solución
Asegúrate de que la entrada que se pasó a la política de extracción de variables sea válida y no tenga errores de formato.
Para solucionar el problema con la política de extracción de variables de ejemplo que se mencionó antes, pasa una solicitud de carga útil de JSON válida de la siguiente manera:
{
"args":{
"name":"amar"
}
}
UnableToCast
Código de error
steps.extractvariables.UnableToCast
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "Unable to cast value [value] as [type].", "detail": { "errorcode": "steps.extractvariables.UnableToCast" } } }
Causa
Este error se produce si la política de extracción de variables no pudo convertir el valor extraído en una variable. Por lo general, esto sucede si intentas establecer el valor de un tipo de datos como una variable de otro tipo de datos.
Por ejemplo, si la política de extracción de variables intenta establecer un valor que se extrajo de una variable de string a una variable de número entero, se muestra este error.
Diagnóstico
Identifica el tipo de datos de la variable a la que la política de extracción de variables intenta transmitir y falla. Puedes encontrar esta información en el elemento
faultstring
de la respuesta de error. Por ejemplo, en el siguiente archivofaultstring
, el tipo de objeto esBOOLEAN
:"faultstring":"Unable to cast value 36.231 as BOOLEAN."
Identifica la política de extracción de variables en la que intentas establecer el valor en una variable de tipo determinada en el paso 1.
Por ejemplo, la siguiente política de extracción de variables extrae el valor de una
$.latitude
de JSONPath a una variable de tipoboolean
, que coincide con lo que hay en la string de error:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="latitude" type="boolean"> <JSONPath>$.latitude</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">response</Source> </ExtractVariables>
Examina el tipo de datos del valor que se extrae. Los datos pueden estar en forma de encabezados, rutas de URI, cargas útiles de JSON/XML, parámetros de forma y parámetros de consulta.
Verifica si el tipo de datos determinado en el paso 3 y el tipo de datos de la variable a la que se asignan los datos (determinado en el paso 2) son los mismos.
Si el tipo de datos de las variables de origen y destino no es el mismo, esa es la causa del error.
En la política de extracción de variables de ejemplo anterior, considera que la carga útil de la solicitud de JSON es la siguiente:
{ "latitude":36.2312 }
El tipo de datos del valor que se extrae de
<JSONPath>
,‘$.latitude’
, es un número entero, que se asigna a una variable de tipo booleano de datos.Dado que el tipo de datos del valor extraído y el tipo de datos de la variable a la que se le asigna el valor no son los mismos, recibes el código de error:
steps.extractvariables.UnableToCast
.
Solución
Asegúrate de que el tipo de datos de valor extraído y la variable a la que se asigna el contenido sean del mismo tipo.
Para corregir la política de extracción de variables de ejemplo, debes modificar el tipo de variable a número entero:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="latitude" type="integer">
<JSONPath>$.latitude</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response</Source>
</ExtractVariables>
JsonPathParsingFailure
Código de error
steps.extractvariables.JsonPathParsingFailure
Cuerpo de la respuesta del error
{ "fault": { "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for flow variables [variable_name]", "detail": { "errorcode": "steps.extractvariables.JsonPathParsingFailure" } } }
Causa
Este error se produce cuando la política de extracción de variables no puede analizar una ruta JSON y extraer datos de la variable de flujo especificada en el elemento <Source>
. Por lo general, esto sucede si la variable de flujo especificada en el elemento <Source>
no existe en el flujo actual.
Por ejemplo, este error ocurre si la política de extracción de variables se ejecuta en el flujo de respuesta y se espera analizar una ruta de acceso JSON, pero el elemento <Source>
especifica la variable de flujo request.content
, que no existe en el flujo de respuesta.
Diagnóstico
Identifica la política de extracción de variables en la que se produjo el error y el nombre de la variable de flujo en el que no se pudieron extraer los datos. Puedes encontrar ambos elementos en el elemento de la string del error de la respuesta de error. Por ejemplo, en la siguiente string del error, el nombre de la política es
ExtractVariables-1
y la variable esrequest.content
:"faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for flow variables request.content"
En el archivo XML de la política de extracción de variables con errores, verifica que el nombre de la variable establecida en el elemento
<Source>
coincida con el nombre de la variable identificado en la string de relleno (paso 1 anterior). Por ejemplo, la siguiente política de extracción de variables especifica una variable llamadarequest.content
, que coincide con lo que hay en la string del error:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true"> <JSONPayload> <Variable name="Name" type="string"> <JSONPath>$.args.name</JSONPath> </Variable> </JSONPayload> <Source clearPayload="false">request.content</Source> </ExtractVariables>
Valida si la variable de flujo que se usa en el elemento
<Source>
está definida y está disponible en el flujo en el que se ejecuta la política de extracción de variables.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 ExtractVariables que se muestra arriba se debe ejecutar en el flujo de respuesta. Recuerda que la variable de flujo
request.content
se usa en el elemento<Source>
de la política de extracción de variables. La variable de flujorequest.content
solo está disponible en el flujo de solicitud.Dado que la variable
response
no existe en el flujo de solicitud, recibes el código de error:steps.extractvariables.JsonPathParsingFailure
.
Solución
Asegúrate de que la variable de flujo que se usa en el elemento <Source>
de la política de extracción de variables esté disponible en el flujo en el que se ejecuta la política de extracción de variables.
Por ejemplo, supongamos que existe una variable llamada response.content
en el flujo de respuesta y, de hecho, contiene el JSON que deseas extraer. Para corregir la política de extracción de variables que se muestra arriba, puedes modificar el elemento <Source>
de la siguiente manera:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
<JSONPayload>
<Variable name="Name" type="string">
<JSONPath>$.args.name</JSONPath>
</Variable>
</JSONPayload>
<Source clearPayload="false">response.content</Source>
</ExtractVariables>