Come gestire gli errori di callout Java

Questa pagina si applica ad Apigee e Apigee hybrid.

Visualizza la documentazione di Apigee Edge.

Che cos'è un callout Java?

Se non hai mai utilizzato i callout Java, ti consigliamo di iniziare con l'articolo Come creare un callout Java.

Gestione degli errori in un callout Java

Quando scrivi un callout Java, ti consigliamo di eseguire la gestione degli errori personalizzata nel codice Java. Ad esempio, potresti voler restituire intestazioni e messaggi di errore personalizzati e/o impostare variabili di flusso con informazioni sugli errori nel flusso proxy su Apigee.

Vediamo un semplice esempio di callout Java che illustra pattern di gestione degli errori personalizzati di base. Il sample restituisce un messaggio di errore personalizzato quando si verifica un'eccezione. Inoltre, inserisce la traccia dello stack dell'errore in una variabile di flusso, che può essere una tecnica di debug utile.

Scarica il progetto

Per semplificare, puoi scaricare questo progetto dal repository api-platform-samples di Apigee su GitHub.

  1. Scarica o clona api-platform-samples sul tuo sistema.
  2. In un terminale o in un editor di codice a tua scelta, vai al progetto api-platform-samples/doc-samples/java-error.

Il codice Java di esempio

I pattern di gestione degli errori sono semplici. Puoi impostare le variabili di flusso nel contesto corrente del flusso Apigee con il metodo messageContext.setVariable(). Per restituire informazioni personalizzate sugli errori, crea un'istanza di ExecutionResult e chiama i relativi metodi per impostare la risposta e le intestazioni di errore.

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;
        }
    }
}


Compila il codice con Maven

Il progetto è configurato in modo da poter essere compilato con Maven. Se vuoi utilizzare javac, includeremo anche un esempio.

  1. Assicurati di aver installato Maven:
    mvn -version
  2. Esegui lo script java-error/buildsetup.sh. Questo script installa le dipendenze JAR richieste nel repository Maven locale.
  3. Vai alla directory java-error/callout.
  4. Esegui Maven:
    mvn clean package
  5. Se vuoi, verifica che il file JAR edge-custom-policy-java-error.jar sia stato copiato in java-error/apiproxy/resources/java. Questa è la posizione richiesta per i file JAR che vuoi eseguire il deployment con un proxy.

Esegui il deployment e chiama il proxy

Nella directory ./java-error è fornito uno script di deployment. Tuttavia, prima di eseguirlo, devi eseguire una breve configurazione.

  1. cd a api-platform-samples/doc-samples/java-error
  2. Il modo più semplice per eseguire il deployment del proxy è raggrupparlo in un file ZIP e caricare il bundle del proxy in un ambiente della tua organizzazione Apigee. Consulta la sezione Creare un proxy API. Assicurati di utilizzare l'opzione Carica pacchetto proxy. Consulta anche Suggerimenti e trucchi per il caricamento del proxy API in un bundle di proxy nella community Apigee.
  3. Dopo aver eseguito il deployment del proxy, prova a chiamarlo:
    curl  https://$HOSTNAME/java-error

    Poiché la chiamata non include un parametro di query "name", il codice Java genera un errore di runtime. Il proxy restituisce questo messaggio e questa intestazione:

  • Messaggio di errore: Please specify a name parameter!
  • Intestazione: ExceptionClass: java.lang.RuntimeException