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

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

ResourceDoesNotExist

Mensaje de error

La implementación del proxy de API a través de la interfaz de usuario o la API de Apigee falla y se muestra 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 ejemplo de error

Error al implementar la revisión 1 en la prueba.

Causa

Si el recurso especificado en el elemento <ResourceURL> de la política JavaCallout no existe en el proxy de API o en el nivel del entorno, se producirá un error al implementar el proxy de API.

Diagnóstico

  1. Identifica el entorno y el nombre del recurso. Puede encontrar esta información en el mensaje de error. Por ejemplo, en el siguiente error, el entorno es test y el nombre del recurso utilizado 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 paso 1 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 forma parte del proxy de API que está fallando o si se ha subido a nivel del entorno. Si no es así, este es el motivo del error.

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

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

    • Los recursos pueden estar disponibles a nivel de entorno. Para obtener más información, consulta Archivos de recursos.

      • Para determinar si el recurso existe a nivel de entorno, haz 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"

        Donde $TOKEN es tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usar curl. Para ver una descripción de las variables de entorno que puedes usar, consulta Definir variables de entorno para solicitudes a la API de Apigee.

      Si recibes el código de estado 404 como respuesta de estas APIs, significa que falta el recurso a nivel de entorno.

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

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

Resolución

Comprueba que el recurso especificado en el elemento <ResourceURL> exista en el proxy de API o en el nivel del entorno. Para obtener más información, consulta el artículo sobre gestión de recursos.

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

NoResourceForURL

Mensaje de error

La implementación del proxy de API a través de la interfaz de usuario o la API de Apigee falla y se muestra 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 ejemplo de error

Error en la implementación del entorno de prueba.

Causa

Este error puede producirse si el archivo de recursos está dañado o se ha subido parcialmente, aunque parezca que existe a nivel de proxy de API o de entorno.

Diagnóstico

  1. Identifica el entorno y el nombre del recurso. Puede 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 utilizado 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 a nivel del proxy de API o del entorno. En el ejemplo siguiente, puedes ver que el recurso myresource.jar se sube a nivel del proxy de API.

    Recursos de proxy de API.

    Los recursos pueden estar disponibles a nivel de entorno. Para obtener más información, consulta Archivos de recursos.

    Para determinar si el recurso existe a nivel de entorno, haz 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"

    $TOKEN se corresponde con tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usar curl.

    Si recibes el código de estado 404 como respuesta de estas APIs, significa que falta el recurso a nivel de entorno.

Resolución

  1. Si determina que el recurso existe a nivel de proxy de API o de entorno, elimínelo y vuelva a subirlo, tal como se describe en el paso 2. De lo contrario, ve al paso 3.
  2. Para eliminar el recurso a nivel de proxy de API, vaya a la pestaña Recursos del panel Navegador del editor de proxies de API y haga clic en el botón "X" situado junto al recurso, como se muestra a continuación.

    Para eliminar el recurso a nivel de proxy de API, haz clic en Eliminar.

    Para eliminar recursos en el entorno, usa el verbo DELETE en las llamadas a la API que se han usado anteriormente en los pasos de diagnóstico. Por ejemplo, para eliminar el recurso a nivel de entorno, introduce el siguiente comando:

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

    $TOKEN se corresponde con tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usar curl.

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

  4. Si volver a subir el recurso no ayuda, ponte en contacto con el equipo de Asistencia de Apigee.

JavaCalloutInstantiationFailed

Mensaje de error

La implementación del proxy de API a través de la interfaz de usuario o la API de Apigee falla y se muestra 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 ejemplo de error

Error en la implementación del entorno de prueba.

Causa

Estas son las causas habituales de este error

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

Paso de diagnóstico común

  1. Identifica el nombre del entorno y la clase que no se ha podido importar. Por ejemplo, en el siguiente mensaje de error, el nombre del entorno 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 debería contener la clase (identificada en el paso 1 anterior) y que no se ha podido crear.
  2. Comprueba si el archivo JAR específico se ha subido a nivel del proxy de API o del entorno. Si el archivo JAR no se ha subido a ninguno de los niveles, vaya a Resolución.
  3. Si el archivo JAR se ha subido, ve a Causa: archivo JAR dañado.

Resolución

  1. Si el archivo JAR está dañado o se ha subido parcialmente, vuelve a compilarlo y súbelo al nivel adecuado (proxy de API o entorno).
  2. Vuelve a desplegar el proxy de API.

Causa: archivo JAR dañado

Diagnóstico

  1. Determina el archivo JAR que debería contener la clase (identificada en el paso 1 anterior) que no se ha podido crear.
  2. Comprueba si el archivo JAR específico está dañado. Por ejemplo, si no puedes descomprimir el archivo porque está dañado o se ha subido 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.

Resolución

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

Causa: falta el archivo de clase

Diagnóstico

  1. Comprueba si el archivo de clase Java específico (identificado en el paso 1 anterior) forma parte del archivo JAR especificado en >ResourceURL< o de cualquier archivo JAR dependiente.
  2. Si el archivo de clase no existe en ninguno de los archivos JAR, habrás determinado 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 JavaCallout, debe haber un problema con el código Java o con la clase dependiente que esté provocando este error. Si necesitas ayuda, ponte en contacto con el equipo de Asistencia de Apigee.

Resolución

  1. Recompila el archivo JAR con los archivos de clase que faltan y súbelo al nivel adecuado (proxy de API o entorno).
  2. Vuelve a desplegar el proxy de API.

Sube el archivo JAR

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

  1. Para subir un recurso a nivel de proxy de API, haga clic en + (signo más) en la pestaña Recursos, seleccione 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, tal como se describe en Archivos de recursos.

    Por ejemplo, introduce la siguiente llamada a la API desde la máquina local para subir el archivo especificado a nivel del 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"

    $TOKEN se corresponde con tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usar curl.

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

  3. Para que el archivo esté disponible en todos los proxies de API de todos los entornos de la organización, puede 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"

    $TOKEN se corresponde con tu token de acceso OAuth 2.0, tal como se describe en Obtener un token de acceso OAuth 2.0. Para obtener información sobre las opciones de curl que se usan en este ejemplo, consulta Usar curl.