Solución de problemas de errores de implementación de la política JavaCallout

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

ResourceDoesNotExist

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error Deploying Revision <var>revision_number</var> to <var>environment</var>
Resource with name <var>ResourceURL</var> and type java does not exist.

Ejemplo de mensaje de error

Error Deploying Revision 1 to test
Resource with name myresource.jar and type java does not exist.

Captura de pantalla de error de ejemplo

Error durante la implementación de la revisión 1 para realizar una prueba.

Causa

Si el recurso especificado en el elemento <ResourceURL> en la política JavaCallout no existe a nivel del entorno o del proxy de API, la implementación del proxy de API falla.

Diagnóstico

  1. Identifica el entorno y el nombre del recurso. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el entorno es test y el nombre del recurso que se usa en el elemento <ResourceURL> es myresource.jar.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. Determina la política JavaCallout que usa el recurso identificado en el paso1 anterior.

    Por ejemplo, la siguiente política especifica el valor de <ResourceURL> como myresource.jar, que coincide con el valor del mensaje de error:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JavaCallout name="hello-java">
        <ClassName>com.apigeesample.HelloJava</ClassName>
        <ResourceURL>java://myresource.jar</ResourceURL>
    </JavaCallout>
    
  3. Determina si el recurso es parte del proxy de API que falla o se sube a nivel del entorno. De lo contrario, esa es la causa del error.

    • Para ver todos los recursos subidos en el nivel del proxy de API, navega a la pestaña Recursos en el panel de navegación del editor de proxy de API. En este ejemplo, el proxy de API no tiene recursos subidos.

      Pestaña Recursos del editor de proxy de API en el panel de navegación.

    • Los recursos están disponibles en el nivel del entorno. Para obtener más información, consulta Archivos de recursos.

      • Para determinar si el recurso existe a nivel del entorno, emite la siguiente llamada a la API con curl:

        curl \
        "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
        -H "Authorization: Bearer $TOKEN"

        En el ejemplo anterior, $TOKEN está configurado como tu token de acceso de OAuth 2.0, como se describe en Obtén un token de acceso de OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usa curl. Si deseas obtener una descripción de las variables de entorno que se usaron, consulta Configura variables de entorno para solicitudes a la API de Apigee.

      Si recibes un código de estado404 como respuesta para estas API, falta el recurso a nivel de entorno.

    Si el recurso no está disponible a nivel del proxy de API y del entorno, se muestra el error de implementación:

    Resource with name myresource.jar and type java does not exist.
     ```
    

Solución

Asegúrate de que el recurso especificado en el elemento <ResourceURL> exista en el proxy de API o el nivel de entorno. Para obtener más información, consulta Administra recursos.

Para corregir el ejemplo de la política JavaCallout que se muestra arriba, sube el archivo JAR al nivel adecuado (nivel del entorno o del proxy de API).

NoResourceForURL

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL <var>ResourceURL</var>

Ejemplo de mensaje de error

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar

Captura de pantalla de error de ejemplo

Error en la implementación de la prueba del entorno.

Causa

Este error puede ocurrir si el archivo de recursos está dañado o se subió parcialmente, aunque parece que existe al nivel del proxy de API o de entorno.

Diagnóstico

  1. Identifica el entorno y el nombre del recurso. Puedes encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el nombre del entorno es test y el nombre del recurso que se usa en el elemento <ResourceURL> es myresource.jar.

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Could not locate a resource with URL java://myresource.jar
    
  2. Asegúrate de que el recurso se suba al nivel de proxy de API o de entorno. En el siguiente ejemplo, puedes ver que el recurso myresource.jar se subió al nivel de proxy de API.

    Recursos del proxy de API

    Los recursos están disponibles en el nivel del entorno. Para obtener más información, consulta Archivos de recursos.

    Para determinar si el recurso existe a nivel del entorno, emite la siguiente llamada a la API con curl:

    curl \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
    -H "Authorization: Bearer $TOKEN"

    En el ejemplo anterior, $TOKEN está configurado en tu token de acceso OAuth 2.0, como se describe en Obtén un token de acceso de OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usa curl.

    Si recibes un código de estado404 como respuesta para estas API, falta el recurso a nivel de entorno.

Solución

  1. Si determinas que el recurso existe en el nivel de entorno o de proxy de API, borra el recurso y vuelve a subirlo, como se describe en el paso 2. De lo contrario, sigue con el paso 3.
  2. Para borrar el recurso a nivel del proxy de API, navega hasta la pestaña Recursos en el panel de navegación del editor del proxy de API y haz clic en el botón “X” junto al recurso, como se muestra a continuación.

    Para borrar el recurso a nivel del proxy de API, haz clic en Borrar.

    Para borrar el recurso en el entorno, usa el verbo DELETE en las llamadas a la API que se usaron en los pasos de diagnóstico. Por ejemplo, para borrar el recurso a nivel de entorno, ingresa el siguiente comando:

    curl -X DELETE \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles/java/myresource.jar" \
    -H "Authorization: Bearer $TOKEN"

    En el ejemplo anterior, $TOKEN está configurado en tu token de acceso OAuth 2.0, como se describe en Obtén un token de acceso de OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usa curl.

  3. Sube el archivo JAR al nivel adecuado (proxy de API o nivel de entorno).

  4. Si volver a subir el recurso no se soluciona, comunícate con el equipo de asistencia de Apigee.

JavaCalloutInstantiationFailed

Mensaje de error

Si la implementación del proxy de API a través de la IU de Apigee o la API falla, mostrará con este mensaje de error:

Error in deployment for environment <var>environment</var>
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class <var>class_name</var>

O

Error in deployment for environment <var>environment</var>.
The revision is deployed and traffic can flow, but flow may be impaired. Failed to instantiate the JavaCallout Class <var>class_name</var>

Ejemplo de mensaje de error

Error in deployment for environment test
The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class

Captura de pantalla de error de ejemplo

Error en la implementación de la prueba del entorno.

Causa

Estas son las causas comunes de este error

Causa Descripción
Falta el archivo JAR No se sube el archivo JAR que contiene la clase Java identificada en el error.
Archivo JAR dañado El archivo JAR que contiene la clase Java identificada en el error está dañado o se subió parcialmente.
Falta el archivo de clase El archivo de clase Java identificada en el error no forma parte del archivo JAR especificado en >ResourceURL< ni en archivos JAR dependientes.
Problema del código de Java Hay un error en el código, como un constructor faltante, un problema de dependencia de código o algún otro problema.

Paso de diagnóstico común

  1. Identifica el nombre del entorno y la clase que no se pudo importar. Por ejemplo, en el siguiente nombre de entorno, un mensaje de error es test y el nombre de la clase es my.class:

    Error in deployment for environment test
    The revision is deployed, but traffic cannot flow. Failed to instantiate the JavaCallout Class my.class
    
    

Causa: falta el archivo JAR

Diagnóstico

  1. Determina el archivo JAR que debe contener la clase (identificado en el paso 1 anterior) y en el que no se pudo crear una instancia.
  2. Verifica si el archivo JAR específico se sube a nivel del entorno o del proxy de API. Si el archivo JAR no se sube a ninguno de los niveles, ve a Resolución.
  3. Si se sube el archivo JAR, ve a Causa: archivo JAR dañado.

Solución

  1. Si el archivo JAR está dañado o se subió parcialmente, vuelve a compilar el JAR y sube el archivo JAR al nivel adecuado (proxy de API o nivel de entorno).
  2. Vuelve a implementar el proxy de API.

Causa: archivo JAR dañado

Diagnóstico

  1. Determina el archivo JAR que debe contener la clase (identificado en el paso 1 anterior) en el que no se pudo crear una instancia.
  2. Revisa si el archivo JAR específico está dañado. Por ejemplo, si no puedes desanidar el archivo porque está dañado o se subió parcialmente. Si está dañado, ve a Resolución.
  3. Si el archivo JAR no está dañado, ve a Causa: Falta el archivo de clase.

Solución

  1. Vuelve a compilar los archivos JAR dañados y sube el archivo JAR al nivel adecuado (proxy de API o nivel de entorno).
  2. Vuelve a implementar el proxy de API.

Causa: falta el archivo de clase

Diagnóstico

  1. Verifica si el archivo de clase Java específico (identificado en el paso 1 anterior) forma parte del archivo JAR especificado en >ResourceURL< o en cualquiera de los archivos JAR dependientes.
  2. Si el archivo de clase no existe en ninguno de los archivos JAR, determinaste la causa del error. Ve a Resolución.
  3. Si el archivo de clase existe en uno de los archivos JAR especificados en la política de texto destacado de Java, debe haber un problema con el código Java o la clase dependiente que genera este error. Para obtener ayuda, comunícate con la Asistencia de Apigee.

Solución

  1. Vuelve a compilar el JAR con los archivos de clase faltantes y sube el archivo JAR al nivel adecuado (proxy de API o nivel de entorno).
  2. Vuelve a implementar el proxy de API.

Sube el archivo JAR

Asegúrate de que el elemento de recurso con todas las clases necesarias existan a nivel del entorno o del proxy de API. Para obtener más información, consulta Archivos de recursos.

  1. Para subir un recurso a nivel del proxy de API, haz clic en + (signo más) en la pestaña Recursos. Luego, selecciona Importar archivo y suba el archivo desde su máquina local. El nombre del archivo debe coincidir con el elemento >ResourceURL<, pero sin el prefijo java://.

    En la pestaña Recursos, selecciona Importar archivo.

  2. Si quieres que un recurso esté disponible para más de un proxy de API en el mismo entorno, sube el recurso al entorno. Deberás usar la API de Apigee, como se describe en Archivos de recursos.

    Por ejemplo, ingresa la siguiente llamada a la API desde la máquina local para subir el archivo especificado a nivel de entorno:

    curl -H "Content-Type: application/octet-stream" \
    -X POST  -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \
    "https://apigee.googleapis.com/v1/organizations/$ORG/environments/$ENV/resourcefiles?name=myresouce.jar&type=java"

    En el ejemplo anterior, $TOKEN está configurado en tu token de acceso OAuth 2.0, como se describe en Obtén un token de acceso de OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usa curl.

    Emite la llamada a la API desde el mismo directorio que el archivo.

  3. A fin de que el archivo esté disponible para todos los proxies de API dentro de todos los entornos de la organización, puedes omitir los detalles del entorno en la ruta base. Por ejemplo:

    curl -H "Content-Type: application/octet-stream" \
    -X POST  -H "Authorization: Bearer $TOKEN" --data-binary @{classes.jar} \
    "https://apigee.googleapis.com/v1/organizations/$ORG/resourcefiles?name=myresouce.jar&type=java"

    En el ejemplo anterior, $TOKEN está configurado en tu token de acceso OAuth 2.0, como se describe en Obtén un token de acceso de OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usa curl.