Solucionar problemas de tiempo de ejecución de Extraer variables

Estás consultando la documentación de Apigee y Apigee Hybrid.
Consulta la documentación de Apigee Edge.

SourceMessageNotAvailable

Código de error

steps.extractvariables.SourceMessageNotAvailable

Cuerpo de respuesta de error

{
  "fault": {
      "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]",
      "detail": {
          "errorcode": "steps.extractvariables.SourceMessageNotAvailable"
      }
  }
}

Causa

Este error se produce si la variable message especificada en el elemento<Source> de la política Extract Variables es una de las siguientes:

  • 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 Extraer variables se ejecuta en el flujo de solicitud, pero el elemento <Source> se asigna a la variable response o error, que no existe en el flujo de solicitud.

Diagnóstico

  1. Identifica la política Extract Variables 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 la siguiente cadena de 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 XML de la política Extract Variables fallida, comprueba que el nombre de la variable definida en el elemento coincida con el nombre de la variable identificada en la cadena de error (paso 1 anterior). Por ejemplo, la siguiente política Extract Variables especifica una variable llamada response en el elemento, que coincide con lo que hay en la cadena de errores:

    <ExtractVariables name="ExtractVariables-1">
        <Source>response</Source>
        <URIPath>
            <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
        </URIPath>
        <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    
  3. Determina si la variable utilizada en el elemento <Source> está definida y disponible en el flujo en el que se ejecuta la política Extract Variables.

  4. 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 Extraer variables mostrada arriba se ejecuta en el flujo de solicitud. Recuerda que la variable response se usa en el elemento <Source> de la política Extract Variables. La variable response solo está disponible en el flujo de respuesta.

    Como la variable response no existe en el flujo de la solicitud, recibes el código de error steps.extractvariables.SourceMessageNotAvailable.

Resolución

Comprueba que la variable definida en el elemento <Source> de la política Extract Variables fallida se haya definido y exista en el flujo en el que se ejecuta la política.

Para corregir la política Extract Variables de ejemplo que se muestra arriba, puede modificar el elemento <Source> para usar la variable request tal como existe en el flujo de solicitudes:

<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 respuesta de 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 Extract Variables no ha podido asignar el valor a una variable. Esto suele ocurrir si intentas asignar valores a varias variables cuyos nombres empiezan por las mismas palabras en un formato anidado separado por puntos.

Por ejemplo, supongamos que crea o asigna 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, se producirá un error porque color ya está asignada y no se permite asignar otra variable a ella.

Diagnóstico

  1. Identifique la política Extraer variables en la que se ha producido el error y el nombre de la variable cuyo valor no se ha podido definir. Puedes encontrar ambos elementos en el elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente cadena de 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 XML de la política Extract Variables fallida, comprueba que el nombre de la variable coincide con el nombre de la variable identificada en la cadena de error (paso 1 anterior). Por ejemplo, la siguiente política intenta asignar un valor de un parámetro de consulta de una solicitud a una variable llamada var.color.next (el valor que aparece en la cadena de 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 que se han usado en la política Extract Variables fallida. Si ha asignado un valor a otra variable cuyo nombre empieza por el mismo nombre que el de la variable identificada en la cadena de error (paso 1 anterior), esa es la causa del error.

    En el ejemplo de política Extract Variables 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 tal como se define en el elemento <VariablePrefix>).
    • En la siguiente asignación, el valor del parámetro de consulta nextcolor se asigna a otra variable, var.color.next.
    • Como var.color ya está asignada, la política Extraer variables no puede asignar otra variable anidada var.color.next. Por lo tanto, recibes el código de error steps.extractvariables.SetVariableFailed.

Resolución

Asegúrate de que no haya varios nombres de variables que empiecen por las mismas palabras anidadas en formato separado por puntos.

Para corregir la política Extract Variables que se muestra arriba, puedes modificar el nombre de la variable var.color.next para usar el nombre de la variable 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 respuesta de error

{
    "fault": {
        "faultstring": "Invalid JSON path [path_name] in policy [policy_name].",
        "detail": {
            "errorcode": "steps.extractvariables.InvalidJSONPath"
        }
    }
}

Causa

Este error se produce si se usa una ruta JSON no válida en el elemento <JSONPath> de la política Extract Variables. Por ejemplo, si una carga útil JSON no tiene el objeto Name, pero especificas Name como la ruta en la política Extract Variables, se producirá este error.

Diagnóstico

  1. Identifica la política Extract Variables en la que se ha producido 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 cadena de 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 XML de la política Extract Variables fallida, compruebe que la ruta JSON definida en el elemento <JSONPath> coincide con la ruta identificada en la cadena de error (paso 1 anterior). Por ejemplo, la siguiente política Extract Variables especifica la ruta JSON $.Name, que coincide con lo que hay en la cadena de errores:

    <?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 de qué carga útil de JSON estás intentando extraer la variable. Por ejemplo, si el elemento <Source> tiene el valor request, la política extraerá la carga útil de JSON del objeto de solicitud. Si se le asigna el valor response, será el objeto de respuesta.

    En el ejemplo de política Extract Variables que se muestra arriba, el elemento <Source> se ha definido 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 en el paso 3) y comprueba si tiene el objeto especificado en el elemento <JSONPath>. Si la carga útil JSON no tiene ese objeto, ese es el motivo del error.

    Por ejemplo, supongamos que quieres extraer variables de la siguiente carga útil de respuesta JSON:

    {
      "firstName":"John",
      "lastName":"Doe",
      "city":"San Jose",
      "state":"CA"
    }
    

    Como la carga útil de la respuesta JSON no tiene el objeto Name, la política Extraer variables falla y se devuelve el código de error steps.extractvariables.InvalidJSONPath.

Resolución

Asegúrate de que solo se especifiquen los objetos que forman parte de la carga útil de JSON de la que se extraen las variables en el elemento <JSONPath> de la política Extract Variables.

Para corregir la política Extract Variables de ejemplo que se muestra arriba, puedes modificar el elemento <JSONPath> para especificar uno de los objetos disponibles en la carga útil de la respuesta JSON de ejemplo (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 respuesta de error

{
    "fault": {
        "faultstring": "Failed to execute the ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.ExecutionFailed"
        }
    }
}

Posibles motivos

Estas son las posibles causas de este error:

Causa Descripción
Falta la carga útil de entrada La carga útil de entrada (JSON o XML) está vacía.
Entrada no válida o con formato incorrecto La entrada (JSON, XML, etc.) que se ha enviado a la política no es válida o tiene un formato incorrecto.

Causa: falta la carga útil de entrada

Si la política Extract Variables debe extraer 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, se produce este error.

Por ejemplo, si el elemento <Source> de la política Extraer variables se define como request o response y se supone que debe contener una carga útil JSON o XML, pero la carga útil está vacía, se produce el error.

Diagnóstico

  1. Identifica la política Extract Variables en la que se ha producido el error. Puedes encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente cadena de error, el nombre de la política es ExtractJSONVariables:

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

  2. Examina el elemento <Source> del archivo XML de extracción de variables que falla y determina el tipo de entrada del que se extraen las variables. Por ejemplo, la siguiente política Extract Variables tiene el elemento <Source> definido como 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 analiza la política Extract Variables está vacía. Si la entrada está vacía, ese es el motivo del error.

    En el ejemplo de política Extract Variables que se muestra arriba, la carga útil de la respuesta (es decir, el cuerpo de la respuesta) que envió el servidor backend estaba vacía.

    Como la carga útil de la respuesta XML está vacía, recibes el código de error:

    steps.extractvariables.ExecutionFailed

    Este error también puede producirse si el elemento <Source> se define como request, pero no se transfiere ninguna carga útil en la solicitud del proxy de API. Por ejemplo:

    curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml"
    

    Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

    La política Extract Variables solo realiza la extracción de XML cuando el encabezado Content-Type del mensaje es application/xml, text/xml o application/*+xml. Debe enviar el encabezado Content-Type como application/xml, text/xml o application/*+xml si quiere que la política Extract Variables analice una carga útil de solicitud XML.

Resolución

Asegúrate de que la entrada que se ha enviado a la política Extraer variables sea válida y no esté vacía.

Para solucionar el problema con la política Extract Variables de ejemplo que se muestra arriba, envía una carga útil XML válida. Por ejemplo:

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

    <city>Bengaluru</city>
    <area>Sanjaynagar</area>
    
  2. Haz la llamada a la API con un comando cURL de la siguiente manera:

    curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
    
    

    Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

Causa: entrada no válida o con formato incorrecto

Si la política Extract Variables analiza una entrada no válida o con un formato incorrecto, se produce este error.

Por ejemplo, si se proporciona el siguiente JSON no válido como entrada a la política Extraer variables, se producirá este error.

[
    "args": ["name" : "amar" ]
]

Diagnóstico

  1. Identifica la política Extract Variables en la que se ha producido el error. Puede 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> del archivo XML de extracción de variables que falla y determina el tipo de entrada del que se extraen las variables. Por ejemplo, la siguiente política Extract Variables tiene el elemento <Source> definido como request y extrae las variables de la carga útil 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 analiza la política Extraer variables es válida. Si la entrada no es válida o tiene un formato incorrecto, ese será el motivo del error.

    En el ejemplo de política Extraer variables que se muestra arriba, se ha enviado el siguiente JSON no válido a la política Extraer variables

    [
        "args": ["name" : "amar" ]
    ]
    

    A continuación, se muestra una llamada de API de ejemplo que muestra cómo se ha enviado la solicitud:

    curl -v "http://<$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
    

    Donde $EXTERNAL_IP es la dirección IP del balanceador de carga externo. Esta dirección IP está expuesta a Internet. Para obtener más información, consulta Personalizar el enrutamiento de acceso.

    La carga útil de JSON que se ha enviado a la API no es válida porque contiene una matriz con corchetes ([ ]) , por lo que recibe el código de error:

    steps.extractvariables.ExecutionFailed
    

    Este error también puede producirse si el elemento <Source> se ha definido como response, pero la carga útil de la respuesta JSON no es válida o tiene un formato incorrecto.

Resolución

Asegúrate de que la entrada que se ha enviado a la política Extraer variables sea válida y no tenga un formato incorrecto.

Para solucionar el problema con la política Extract Variables de ejemplo que se ha descrito anteriormente, envía una solicitud de carga útil JSON válida de la siguiente manera:

{
   "args":{
      "name":"amar"
   }
}

UnableToCast

Código de error

steps.extractvariables.UnableToCast

Cuerpo de respuesta de error

{
    "fault": {
        "faultstring": "Unable to cast value [value] as [type].",
        "detail": {
            "errorcode": "steps.extractvariables.UnableToCast"
        }
    }
}

Causa

Este error se produce si la política Extract Variables no ha podido convertir el valor extraído en una variable. Normalmente, esto ocurre si intentas asignar el valor de un tipo de datos a una variable de otro tipo de datos.

Por ejemplo, si la política Extraer variable intenta asignar a una variable de tipo Integer un valor que se ha extraído de una variable de tipo String, se mostrará este error.

Diagnóstico

  1. Identifica el tipo de datos de la variable a la que la política Extract Variables intenta convertir y no lo consigue. Puede encontrar esta información en el elemento faultstring de la respuesta de error. Por ejemplo, en el siguiente faultstring, el tipo de objeto es BOOLEAN:

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

  2. Identifica la política Extraer variables en la que estás intentando asignar el valor a una variable del tipo determinado en el paso 1.

    Por ejemplo, la siguiente política Extract Variables extrae el valor de un JSONPath $.latitude a una variable de tipo boolean, que coincide con lo que hay en la cadena 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 está extrayendo. Los datos pueden estar en forma de encabezados, rutas de URI, cargas útiles JSON o XML, parámetros de formulario y parámetros de consulta.

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

  5. Si el tipo de datos de las variables de origen y de destino no es el mismo, esa es la causa del error.

    En la política Extract Variables de ejemplo que se muestra arriba, supongamos que la carga útil de la solicitud JSON es la siguiente:

    {
     "latitude":36.2312
    }
    

    El tipo de datos del valor que se extrae de <JSONPath> y '$.latitude' es un número entero, que se asigna a una variable de tipo de datos booleano.

    Como el tipo de datos del valor extraído y el tipo de datos de la variable a la que se asigna el valor no son los mismos, se muestra el código de error steps.extractvariables.UnableToCast.

Resolución

Asegúrese de que el tipo de datos del valor extraído y el de la variable a la que se asigna el contenido sean iguales.

Para corregir la política Extract Variables de ejemplo, debe modificar el tipo de la variable a Integer:

<?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 respuesta de error

{
    "fault": {
        "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for for flow variables [variable_name]",
        "detail": {
            "errorcode": "steps.extractvariables.JsonPathParsingFailure"
        }
    }
}

Causa

Este error se produce cuando la política Extract Variables no puede analizar una ruta JSON y extraer datos de la variable de flujo especificada en el elemento <Source>. Normalmente, esto ocurre si la variable de flujo especificada en el elemento <Source> no existe en el flujo actual.

Por ejemplo, este error se produce si la política Extraer variables se ejecuta en el flujo de respuesta y espera analizar una ruta 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 Extract Variables en la que se ha producido el error y el nombre de la variable de flujo a la que no se han podido extraer los datos. Puedes encontrar ambos elementos en el elemento faultstring de la respuesta de error. Por ejemplo, en la siguiente cadena de error, el nombre de la política es ExtractVariables-1 y la variable es request.content:

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

  2. En el XML de la política Extract Variables fallida, comprueba que el nombre de la variable definida en el elemento <Source> coincide con el nombre de la variable identificada en la cadena de error (paso 1 anterior). Por ejemplo, la siguiente política Extract Variables especifica una variable llamada request.content, que coincide con lo que hay en faultstring:

    <?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 utilizada en el elemento <Source> está definida y disponible en el flujo en el que se está ejecutando la política Extract Variables.

  4. 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 ExtractVariables mostrada 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 Extract Variables. La variable de flujo request.content solo está disponible en el flujo de solicitud.

    Como la variable response no existe en el flujo de la solicitud, recibes el código de error steps.extractvariables.JsonPathParsingFailure.

Resolución

Asegúrate de que la variable de flujo utilizada en el elemento <Source> de la política ExtractVariables esté disponible en el flujo en el que se ejecuta la política ExtractVariables.

Por ejemplo, supongamos que hay una variable llamada response.content en el flujo de respuesta y que contiene el JSON que quiere extraer. Para corregir la política ExtractVariables 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>