<ph type="x-smartling-placeholder"></ph>
Vous consultez la documentation Apigee Edge.
Accédez à la page
Documentation sur Apigee X. En savoir plus
ResourceDoesNotExist
Message d'erreur
Le déploiement du proxy d'API via l'interface utilisateur Edge ou l'API de gestion Edge échoue avec ce message d'erreur:
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
Cause
Si la ressource spécifiée dans l'élément <ResourceURL>
de la règle JavaAccroche n'existe pas au niveau du proxy d'API, de l'environnement ou de l'organisation, le déploiement du proxy d'API échoue.
Diagnostic
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>
estmyresource.jar
.Error Deploying Revision 1 to test Resource with name myresource.jar and type java does not exist.
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 étantmyresource.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>
Déterminez si la ressource fait partie du proxy d'API qui est défaillante ou qui a été importée au niveau de l'environnement ou de l'organisation. 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.
Les ressources peuvent être disponibles au niveau de l'environnement ou de l'organisation. 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 à l'aide de curl:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Pour déterminer si la ressource existe au niveau de l'organisation, exécutez l'appel d'API suivant à l'aide de curl, en omettant les détails de l'environnement:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Si vous recevez un code d'état 404 en réponse à ces API, cela signifie que la ressource est manquante au niveau de l'organisation et de l'environnement.
Si la ressource n'est pas disponible au niveau du proxy d'API, de l'organisation 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 au niveau du proxy d'API, de l'environnement ou de l'organisation. Pour en savoir plus, consultez la section Fichiers de ressources.
Pour corriger l'exemple de règle JavaAccroche ci-dessus, importez le fichier JAR au niveau approprié (proxy d'API, organisation ou environnement).
NoResourceForURL
Message d'erreur
Le déploiement du proxy d'API via l'interface utilisateur Edge ou l'API de gestion Edge échoue avec ce message d'erreur:
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
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, de l'environnement ou de l'organisation.
Diagnostic
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>
estmyresource.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
Assurez-vous que la ressource est importée au niveau du proxy d'API, de l'environnement ou de l'organisation. Dans l'exemple ci-dessous, vous pouvez voir que la ressource
myresource.jar
est importée au niveau du proxy d'API.Les ressources peuvent être disponibles au niveau de l'environnement ou de l'organisation. 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 à l'aide de curl:
curl -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Pour déterminer si la ressource existe au niveau de l'organisation, exécutez l'appel d'API suivant à l'aide de curl, en omettant les détails de l'environnement:
curl -v -u email "https://api.enterprise.apigee.com/v1/organizations/myorg/resourcefiles/java/myresource.jar"
Si vous recevez un code d'état 404 en réponse à ces API, cela signifie que la ressource est manquante au niveau de l'organisation et de l'environnement.
Solution
- Si vous déterminez que la ressource existe au niveau du proxy d'API, de l'organisation ou de l'environnement, supprimez la ressource et réimportez-la, comme décrit à l'étape 2. Sinon, passez à l'étape 3.
Pour supprimer la ressource au niveau du proxy d'API, accédez à l'onglet Ressources dans le volet Navigateur de l'éditeur de proxy d'API et cliquez sur le bouton « X » à côté de la ressource, comme illustré ci-dessous.
Pour supprimer une ressource au niveau de l'environnement ou de l'organisation, utilisez le verbe DELETE sur les appels d'API utilisés précédemment dans les étapes de diagnostic. Par exemple, pour supprimer la ressource au niveau de l'environnement, saisissez la commande suivante:
curl -X DELETE -v -u <strong>email </strong>"https://api.enterprise.apigee.com/v1/organizations/myorg/environments/myenv/resourcefiles/java/myresource.jar"
Importez le fichier JAR) au niveau approprié (proxy API, organisation ou environnement).
Si la réimportation de la ressource ne résout pas le problème, vous devez redémarrer les processeurs de messages concernés. Si vous utilisez Apigee Edge dans le cloud, contactez l'assistance Apigee. Si vous êtes un utilisateur de cloud privé, consultez Démarrer, arrêter, redémarrer et vérifier l'état d'Apigee Edge.
JavaCalloutInstantiationFailed
Message d'erreur
Le déploiement du proxy d'API via l'interface utilisateur Edge ou l'API de gestion Edge échoue avec ce message d'erreur:
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
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
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 estmy.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
- 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é.
- Vérifiez si le fichier JAR spécifique est téléchargé au niveau du proxy d'API, de l'organisation ou de l'environnement. Si le fichier JAR n'est importé à aucun de ces niveaux, accédez à la section "Solution".
- Si le fichier JAR est importé, accédez à la section Cause : fichier JAR corrompu.
Solution
- Si le fichier JAR est corrompu ou partiellement importé, recréez-le et importez-le au niveau approprié (proxy d'API, organisation ou environnement).
- Redéployez le proxy d'API.
Cause : fichier JAR corrompu
Diagnostic
- 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é.
- 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".
- Si le fichier JAR n'est pas corrompu, accédez à la cause Cause : fichier de classe manquant.
Solution
- Recréez le ou les fichiers JAR corrompus et importez-les au niveau approprié (proxy d'API, organisation ou environnement).
- Redéployez le proxy d'API.
Cause : fichier de classe manquant
Diagnostic
- 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.
- 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".
- Si le fichier de classe figure dans l'un des fichiers JAR spécifiés dans la règle JavaAccroche, il doit y avoir un problème avec le code Java ou la classe dépendante à l'origine de cette erreur. a. Si vous utilisez le cloud public, contactez l'assistance Apigee. b. Si vous utilisez un cloud privé, passez à la section Cause: problème de code Java.
Solution
- Recréez le fichier JAR avec le ou les fichiers de classe manquants, puis importez le fichier JAR au niveau approprié (proxy d'API, organisation ou environnement).
- Redéployez le proxy d'API.
Cause: problème de code Java
Étapes de diagnostic pour les utilisateurs de cloud privé uniquement
Diagnostic
- Vérifiez les journaux du processeur de messages (
/opt/apigee/var/log/edge-message-processor/system.log
et/opt/apigee/var/log/edge-message-processor/configurations.log
). Une exception semblable à l'exemple ci-dessous peut s'afficher:
2019-07-05 05:40:13,240 org:myorg env:staging target:/organizations/myorg/apiproxies/MyAPI/revisions/5 action:add context-id: mode: Apigee-Main-53 ERROR CONFIG-CHANGE - AbstractConfigurator.add() : Add null to Step failed, reason: {} com.apigee.kernel.exceptions.spi.UncheckedException: Failed to instantiate the JavaCallout Class <class name> at com.apigee.steps.javacallout.JavaCalloutStepDefinition.newInstance(JavaCalloutStepDefinition.java:116) at com.apigee.messaging.runtime.StepDefinition.getStepDefinitionExecution(StepDefinition.java:218) …<snipped> Caused by: java.lang.reflect.InvocationTargetException: null at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at com.apigee.steps.javacallout.JavaCalloutStepDefinition.access$100(JavaCalloutStepDefinition.java:41) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.initialize(JavaCalloutStepDefinition.java:131) at com.apigee.steps.javacallout.JavaCalloutStepDefinition$CallOutWrapper.<init>(JavaCalloutStepDefinition.java:126) ... 42 common frames omitted Caused by: <Reason> ...<snipped>
Lisez attentivement l'exception pour comprendre la raison de l'échec. En général, cela peut indiquer un problème dans votre code Java.
Solution
- Selon la cause de l'échec, vous devrez peut-être corriger le problème dans votre code Java.
- Recréez le fichier JAR avec le ou les fichiers de classe manquants, puis importez le fichier JAR au niveau approprié (proxy d'API, organisation ou environnement).
- Redéployez le proxy d'API.
Importer le fichier JAR
Assurez-vous que l'élément de ressource avec toutes les classes nécessaires existe au niveau du proxy d'API, de l'environnement ou de l'organisation. Pour en savoir plus, consultez la page Fichiers de ressources.
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://
.Si vous souhaitez qu'une ressource soit disponible pour plusieurs proxys d'API dans le même environnement, importez-la dans l'environnement. Vous devez utiliser l'API Edge, comme décrit dans la section 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 -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/environments/myenv/resourcefiles?name=myresouce.jar&type=java"
Envoyez l'appel d'API depuis le même répertoire que le fichier.
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 -v -u email -H "Content-Type: application/octet-stream" \ -X POST --data-binary @{classes.jar} \ "http://{mgmt_server}:{port}/v1/organizations/myorg/resourcefiles?name=myresouce.jar&type=java"