Résoudre les erreurs de déploiement de la règle JavaCallout

Vous consultez la documentation d'Apigee et d'Apigee hybrid.
Consultez la documentation d'Apigee Edge.

ResourceDoesNotExist

Message d'erreur

Le déploiement du proxy d'API par le biais de l'interface utilisateur ou l'API Apigee échoue avec le message d'erreur suivant :

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

Exemple de message d'erreur

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

Exemple de capture d'écran d'erreur

Erreur lors du déploiement de la révision 1 sur "test".

Cause

Si la ressource spécifiée dans l'élément <ResourceURL> de la règle JavaCallout n'existe pas au niveau de l'environnement ou du proxy d'API, le déploiement du proxy d'API échoue.

Diagnostic

  1. Identifiez l'environnement et le nom de la ressource. Vous trouverez cette information dans le message d'erreur. Par exemple, dans l'erreur suivante, l'environnement est test et le nom de la ressource utilisé dans l'élément <ResourceURL> est myresource.jar.

    Error Deploying Revision 1 to test
    Resource with name myresource.jar and type java does not exist.
    
  2. Déterminez la règle JavaCallout qui utilise la ressource identifiée à l'étape 1 ci-dessus.

    Par exemple, la règle suivante spécifie la valeur de <ResourceURL> comme étant myresource.jar, ce qui correspond à la valeur figurant dans le message d'erreur :

    <?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. Déterminez si la ressource fait partie du proxy dAPI défaillant ou si elle importée au niveau de l'environnement. Si ce n'est pas le cas, il s'agit de la cause de l'erreur.

    • Accédez à l'onglet "Resources" (Ressources) dans le volet de navigation de l'éditeur de proxys d'API pour afficher toutes les ressources importées au niveau du proxy d'API. Dans cet exemple, le proxy d'API ne contient aucune ressource importée.

      Onglet "Resources" (Ressources) de l'éditeur de proxys d'API dans le volet de navigation.

    • Des ressources peuvent être disponibles au niveau de l'environnement. Pour en savoir plus, consultez la page Fichiers de ressources.

      • Pour déterminer si la ressource existe au niveau de l'environnement, exécutez l'appel d'API suivant en utilisant curl :

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

        $TOKEN est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl utilisées dans cet exemple, consultez la section Utiliser curl. Pour obtenir une description des variables d'environnement utilisées, consultez la section Définir des variables d'environnement pour les requêtes API Apigee.

      Si vous recevez un code d'état 404 comme réponse pour ces API, la ressource est manquante au niveau de l'environnement.

    Si la ressource n'est pas disponible au niveau du proxy d'API et de l'environnement, l'erreur de déploiement est renvoyée :

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

Solution

Assurez-vous que la ressource spécifiée dans l'élément <ResourceURL> existe bien au niveau du proxy d'API ou de l'environnement. Pour en savoir plus, consultez la page Gérer les ressources.

Pour corriger l'exemple de règle JavaCallout présenté ci-dessus, importez le fichier JAR au niveau approprié (proxy d'API ou environnement).

NoResourceForURL

Message d'erreur

Le déploiement du proxy d'API par le biais de l'interface utilisateur ou l'API Apigee échoue avec le message d'erreur suivant :

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>

Exemple de message d'erreur

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

Exemple de capture d'écran d'erreur

Erreur lors du déploiement pour le test de l'environnement.

Cause

Cette erreur peut se produire si le fichier de ressources est corrompu ou partiellement importé, même s'il semble exister au niveau du proxy d'API ou de l'environnement.

Diagnostic

  1. Identifiez l'environnement et le nom de la ressource. Vous trouverez cette information dans le message d'erreur. Par exemple, dans l'erreur suivante, le nom de l'environnement est test et le nom de la ressource utilisé dans l'élément <ResourceURL> est 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. Assurez-vous que la ressource est importée au niveau du proxy d'API ou de l'environnement. Dans l'exemple ci-dessous, vous pouvez voir que la ressource myresource.jar est importée au niveau du proxy d'API.

    Ressources de proxy d'API.

    Des ressources peuvent être disponibles au niveau de l'environnement. Pour en savoir plus, consultez la page Fichiers de ressources.

    Pour déterminer si la ressource existe au niveau de l'environnement, exécutez l'appel d'API suivant en utilisant curl :

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

    $TOKEN est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl utilisées dans cet exemple, consultez la page Utiliser curl.

    Si vous recevez un code d'état 404 comme réponse pour ces API, la ressource est manquante au niveau de l'environnement.

Solution

  1. Si vous déterminez que la ressource existe au niveau du proxy d'API ou de l'environnement, supprimez la ressource et réimportez-la, comme décrit à l'étape 2. Sinon, passez à l'étape 3.
  2. Pour supprimer la ressource au niveau du proxy d'API, accédez à l'onglet "Resources" (Ressources) dans le volet de navigation de l'éditeur de proxys d'API, puis cliquez sur le bouton "X" à côté de la ressource, comme illustré ci-dessous.

    Pour supprimer la ressource au niveau du proxy d'API, cliquez sur "Delete" (Supprimer).

    Pour supprimer une ressource dans l'environnement, utilisez le verbe DELETE sur les appels d'API utilisés précédemment lors des étapes de diagnostic. Par exemple, pour supprimer la ressource au niveau de l'environnement, saisissez la commande suivante :

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

    $TOKEN est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl utilisées dans cet exemple, consultez la page Utiliser curl.

  3. Importez le fichier JAR au niveau approprié (proxy d'API ou environnement).

  4. Si la nouvelle importation de la ressource ne résout pas le problème, contactez l'assistance Apigee.

JavaCalloutInstantiationFailed

Message d'erreur

Le déploiement du proxy d'API par le biais de l'interface utilisateur ou l'API Apigee échoue avec le message d'erreur suivant :

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>

Ou

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>

Exemple de message d'erreur

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

Exemple de capture d'écran d'erreur

Erreur lors du déploiement pour le test de l'environnement.

Cause

Voici les causes typiques de cette erreur :

Cause Description
Fichier JAR manquant Le fichier JAR contenant la classe Java identifiée dans l'erreur n'est pas importé.
Fichier JAR corrompu Le fichier JAR contenant la classe Java identifiée dans l'erreur est corrompu ou partiellement importé.
Fichier de classe manquant Le fichier de classe Java identifié dans l'erreur ne fait pas partie du fichier JAR spécifié dans >ResourceURL< ou dans les fichiers JAR dépendants.
Problème de code Java Le code contient une erreur, par exemple un constructeur manquant, un problème de dépendance du code ou autre.

Étape de diagnostic commune

  1. Identifiez le nom de l'environnement et de la classe dont l'importation a échoué. Par exemple, dans le message d'erreur suivant, le nom de l'environnement est test et le nom de la classe est my.class :

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

Cause : fichier JAR manquant

Diagnostic

  1. Déterminez le fichier JAR qui est censé contenir la classe (identifiée à l'étape 1 ci-dessus) et qui ne peut pas être instancié.
  2. Vérifiez si le fichier JAR spécifique est importé au niveau du proxy d'API ou de l'environnement. Si le fichier JAR n'est importé à aucun de ces niveaux, accédez à la section "Solution".
  3. Si le fichier JAR est importé, accédez à la section Cause : fichier JAR corrompu.

Solution

  1. Si le fichier JAR est corrompu ou partiellement importé, recréez le fichier JAR et importez-le au niveau approprié (proxy d'API ou environnement).
  2. Redéployez le proxy d'API.

Cause : fichier JAR corrompu

Diagnostic

  1. Déterminez le fichier JAR qui est censé contenir la classe (identifiée à l'étape 1 ci-dessus) et qui ne peut pas être instancié.
  2. Vérifiez que le fichier JAR spécifique est corrompu. Par exemple, si vous ne pouvez pas extraire les données du fichier JAR, car il est corrompu ou partiellement importé. S'il est corrompu, accédez à la section "Solution".
  3. Si le fichier JAR n'est pas corrompu, accédez à la cause Cause : fichier de classe manquant.

Solution

  1. Recréez le ou les fichiers JAR corrompus et importez-les au niveau approprié (proxy d'API ou environnement).
  2. Redéployez le proxy d'API.

Cause : fichier de classe manquant

Diagnostic

  1. Vérifiez si le fichier de classe Java spécifique (identifié à l'étape 1 ci-dessus) fait partie du fichier JAR spécifié dans >ResourceURL< ou de l'un des fichiers JAR dépendants.
  2. Si le fichier de classe n'existe dans aucun fichier JAR, vous avez déterminé l'origine de l'erreur. Accédez à la section "Solution".
  3. Si le fichier de classe existe dans l'un des fichiers JAR spécifiés dans la règle JavaCallout, il doit y avoir un problème avec le code Java ou la classe dépendante qui entraîne cette erreur. Pour obtenir de l'aide, contactez l'assistance Apigee.

Solution

  1. Recréez le fichier JAR avec le ou les fichiers de classe manquants, puis importez-le au niveau approprié (proxy d'API ou environnement).
  2. Redéployez le proxy d'API.

Importer le fichier JAR

Vérifiez que l'élément de ressource contenant toutes les classes nécessaires existe au niveau du proxy d'API ou de l'environnement. Pour en savoir plus, consultez la page Fichiers de ressources.

  1. Pour importer une ressource au niveau du proxy d'API, cliquez sur + (signe plus) dans l'onglet "Resources" (Ressources), sélectionnez Import file (Importer un fichier), puis importez un fichier depuis votre machine locale. Le nom du fichier doit correspondre à l'élément >ResourceURL<, mais sans le préfixe java://.

    Dans l'onglet "Resources" (Ressources), sélectionnez "Import file" (Importer un fichier).

  2. Si vous souhaitez qu'une ressource soit disponible pour plusieurs proxys d'API dans le même environnement, importez-la dans l'environnement. Vous devrez utiliser l'API Apigee, comme décrit sur la page Fichiers de ressources.

    Par exemple, saisissez l'appel d'API suivant depuis la machine locale pour importer le fichier spécifié au niveau de l'environnement :

    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 est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl utilisées dans cet exemple, consultez la page Utiliser curl.

    Envoyez l'appel d'API depuis le même répertoire que le fichier.

  3. Pour rendre le fichier disponible pour tous les proxys d'API dans tous les environnements de l'organisation, vous pouvez omettre les détails de l'environnement dans le chemin de base. Exemple :

    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 est défini sur votre jeton d'accès OAuth 2.0, comme décrit dans la section Obtenir un jeton d'accès OAuth 2.0. Pour en savoir plus sur les options curl utilisées dans cet exemple, consultez la page Utiliser curl.