Solución de errores del entorno de ejecución de extracción de variables

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

  1. 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 es ExtractVariables-1 y la variable es response:

    "faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"

  2. 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>
    
  3. 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.

  4. 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 variable response 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

  1. 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 es ExtractColors y la variable es var.color.next:

    "faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"

  2. 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>
    
  3. 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 variable var.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 variable var.color.next.
    • Como el var.color ya está asignado, la política de extracción de variables no puede asignar otra variable anidada var.color.next. Por lo tanto, recibirás el siguiente código de error: steps.extractvariables.SetVariableFailed

Solución

  1. 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 usar var.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

  1. 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 es ExtractJSONVariables y la ruta JSON no válida es $.Name:

    "faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."

  2. 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>
    
  3. Examina el elemento <Source> y determina desde qué carga útil JSON intentas extraer la variable. Por ejemplo, si el elemento <Source> se configuró como request, la política extrae la carga útil de JSON del objeto de la solicitud. Si se configura como response, 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 como response, por lo que las variables se extraen de la carga útil JSON de la respuesta.

    <Source>response</Source>

  4. 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

  1. 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 objetos firstName y lastName 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

  1. 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"

  2. 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 en response 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>
    
    
  3. 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ó como request, 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 es application/xml, text/xml o application/*+xml. Debes pasar el encabezado de tipo de contenido como application/xml, text/xml o application/*+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:

  1. Crea un archivo llamado city.xml con el siguiente contenido:

    <city>Bengaluru</city>
    <area>Sanjaynagar</area>
    
  2. 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

  1. 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 siguiente faultstring, el nombre de la política es ExtractJSONVariables:

    "faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"

  2. 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 como request 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>
    
    
  3. 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ó como response, 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

  1. 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 archivo faultstring, el tipo de objeto es BOOLEAN:

    "faultstring":"Unable to cast value 36.231 as BOOLEAN."

  2. 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 $.latitudede JSONPath a una variable de tipo boolean, 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>
    
    
  3. 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.

  4. 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.

  5. 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

  1. 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 es request.content:

    "faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for flow variables request.content"

  2. 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 llamada request.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>
    
    
  3. 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.

  4. 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 flujo request.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>