Gérer les erreurs d'appel Java

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la page Documentation sur Apigee X.
En savoir plus

Qu'est-ce qu'un appel Java ?

Si vous débutez avec les appels Java, nous vous recommandons de commencer par consulter la pageComment créer un appel Java.

Gérer les erreurs dans un appel Java

Lorsque vous écrivez le code de votre appel Java, vous pouvez personnaliser la gestion des erreurs. Pour exemple, vous pouvez souhaiter renvoyer des messages d'erreur et des en-têtes personnalisés et/ou définir des variables de flux avec des informations d'erreur dans le flux de proxy sur Edge.

Examinons un exemple d'accroche Java simple qui illustre des modèles de gestion des erreurs personnalisées de base. L'exemple renvoie un message d'erreur personnalisé lorsqu'une exception se produit. Il place également la pile d'erreurs dans une variable de flux, ce qui peut s'avérer une technique de débogage pratique.

Télécharger le projet

Le moyen le plus simple pour découvrir ce projet est de le télécharger à partir du dépôt api-platform-samples d'Apigee sur GitHub.

  1. Téléchargez ou clonez api-platform-samples sur votre système.
  2. Dans le terminal ou l'éditeur de code de votre choix, accédez au projet api-platform-samples/doc-samples/java-error.

Exemple de code Java

Les modèles permettant de gérer les erreurs sont simples. Vous pouvez définir des variables de flux dans le fichier Contexte de flux périphérique avec la méthode messageContext.setVariable() Pour renvoyer des informations d'erreur personnalisées, créez une instance ExecutionResult et définissez la réponse et les en-têtes de l'erreur en appelant les méthodes appropriées sur cette instance.

package com.apigeesample;

import com.apigee.flow.execution.ExecutionContext;
import com.apigee.flow.execution.ExecutionResult;
import com.apigee.flow.execution.spi.Execution;
import com.apigee.flow.message.MessageContext;
import com.apigee.flow.execution.Action;

import org.apache.commons.lang.exception.ExceptionUtils;


public class JavaError implements Execution {
    public ExecutionResult execute(MessageContext messageContext, ExecutionContext executionContext) {

        try {

                String name = messageContext.getMessage().getHeader("username");

                if (name != null && name.length()>0) {
                        messageContext.getMessage().setContent("Hello, " + name + "!");
                        messageContext.getMessage().removeHeader("username");

                } else {
                        throw new RuntimeException("Please specify a name parameter!");
                }

                return ExecutionResult.SUCCESS;

        } catch (RuntimeException ex) {

            ExecutionResult executionResult = new ExecutionResult(false, Action.ABORT);

            //--Returns custom error message and header
            executionResult.setErrorResponse(ex.getMessage());
            executionResult.addErrorResponseHeader("ExceptionClass", ex.getClass().getName());

            //--Set flow variables -- may be useful for debugging.
            messageContext.setVariable("JAVA_ERROR", ex.getMessage());
            messageContext.setVariable("JAVA_STACKTRACE", ExceptionUtils.getStackTrace(ex));
            return executionResult;
        }
    }
}


Compiler le code avec Maven

Le projet est configuré pour que vous puissiez le compiler avec Maven. Nous incluons également un exemple vous permettant d'utiliser javac si vous le souhaitez.

  1. Assurez-vous que Maven est installé:
    mvn -version
    
  2. Exécutez le script java-error/buildsetup.sh. Ce script installe les dépendances JAR requises dans votre dépôt local Maven.
  3. Accédez au répertoire java-error/callout à l'aide de la commande cd.
  4. Exécutez Maven:
    mvn clean package
    
  5. Si vous le souhaitez, vérifiez que le fichier JAR edge-custom-policy-java-error.jar a bien été copié dans le répertoire java-error/apiproxy/resources/java. C'est à cet emplacement que doivent se trouver les fichiers JAR que vous souhaitez déployer avec un proxy.

Compiler avec javac

Si vous souhaitez utiliser javac pour compiler le code, vous pouvez employez quelque chose de semblable à ce qui suit (à partir du répertoire java-error). Les fichiers JAR requis sont fournis dans le répertoire java-error/lib.

  1. Accédez au répertoire api-platform-samples/doc-samples/java-error à l'aide de la commande cd.
  2. Assurez-vous que javac se trouve dans la variable PATH.

    javac -version
    
  3. Exécutez la commande javac suivante:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
    
  4. Copiez le fichier JAR dans le répertoire apiproxy/resources/java. C'est à cet emplacement que doivent se trouver les fichiers JAR que vous souhaitez déployer avec un proxy.

    cp com/apigeesample/JavaProperties.class apiproxy/resources/java
    

Déployer et appeler le proxy

Un script de déploiement est fourni dans le répertoire ./java-error. Mais avant de l'exécuter, vous devez effectuer une configuration rapide.

  1. Accédez au répertoire api-platform-samples/doc-samples/java-error à l'aide de la commande cd.
  2. Si vous ne l'avez pas déjà fait, ouvrez le fichier ../../setup/setenv.sh et modifiez-le comme indiqué dans vos informations de compte Apigee: votre nom d'utilisateur (l'adresse e-mail associé à votre compte), le nom de votre organisation et le domaine que vous utilisez pour créer l'API de gestion de projet. Par exemple, pour le cloud Edge, le domaine est https://api.enterprise.apigee.com; Cependant, votre domaine peut être différent à l'aide de Edge Private Cloud.
  3. Enregistrez le fichier setenv.sh.
  4. Exécutez le script de déploiement:
    ./deploy.sh
    
  5. Si le déploiement réussit, exécutez le script d'appel:
    ./invoke.sh
    

    Le script d'appel appelle une commande cURL qui se présente comme suit:

    curl  http://$org-$env.$api_domain/java-error
    

    Étant donné que l'appel n'inclut pas de paramètre de requête "name", le code Java génère une erreur d'exécution. Le proxy renvoie ce message et l'en-tête :

  • Message d'erreur : Please specify a name parameter!
  • En-tête : ExceptionClass: java.lang.RuntimeException