Come gestire gli errori Java Callout

Stai visualizzando la documentazione di Apigee X.
Visualizza la documentazione di Apigee Edge.

Che cos'è un callout Java?

Se non hai mai utilizzato i callout Java, ti consigliamo di iniziare con la pagina Come creare un callout Java.

Gestione degli errori in un callout Java

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

Esaminiamo un semplice esempio di callout Java che illustra i pattern di gestione degli errori personalizzati di base. Nell'esempio viene restituito un messaggio di errore personalizzato quando si verifica un'eccezione. Inoltre, posiziona lo stack di errori in una variabile di flusso, che può essere una tecnica di debug utile.

Scarica il progetto

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

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

Esempio di codice Java

I pattern di gestione degli errori sono semplici. Puoi impostare le variabili di flusso nell'attuale contesto del flusso Apigee con il metodo messageContext.setVariable(). Per restituire informazioni sugli errori personalizzati, crea un'istanza ExecutionResult e dei metodi di chiamata per impostare la risposta e le intestazioni dell'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 tuo 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 avere installato Maven:
    mvn -version
  2. Esegui lo script java-error/buildsetup.sh. Questo script installa le dipendenze JAR richieste nel repository Maven locale.
  3. cd 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.

Compila con Javac

Se vuoi utilizzare javac per compilare il codice, puoi fare qualcosa di simile al seguente (dalla directory java-error). I file JAR richiesti vengono forniti nella directory java-error/lib.

  1. cd a api-platform-samples/doc-samples/java-error.
  2. Assicurati di avere il percorso javac.

    javac -version
  3. Esegui questo comando javac:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
  4. Copia il file JAR nella directory apiproxy/resources/java. Questa è la posizione richiesta per i file JAR che vuoi eseguire il deployment con un proxy.

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

Eseguire il deployment e chiamare il proxy

È presente uno script di deployment nella directory ./java-error. Prima di eseguirlo, invece, devi eseguire una rapida configurazione.

  1. cd a api-platform-samples/doc-samples/java-error
  2. Il modo più semplice per eseguire il deployment del proxy consiste nell'inserirlo in un file ZIP e caricarlo in un ambiente nella tua organizzazione Apigee. Vedi Creazione di un proxy API. Assicurati di utilizzare l'opzione Carica bundle proxy. Consulta anche Suggerimenti utili per caricare il proxy API in un bundle proxy nella community di Apigee.
  3. Una volta eseguito il deployment del proxy, prova a chiamarlo:
    curl  https://$HOSTNAME/java-error

    Poiché la chiamata non include un parametro di ricerca "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