Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di
Apigee X. informazioni
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, potrebbe essere utile eseguire una gestione personalizzata degli errori nel codice Java. Ad esempio, potresti voler restituire messaggi di errore e intestazioni personalizzati e/o impostare variabili di flusso con informazioni sull'errore nel flusso proxy su Edge.
Esaminiamo un semplice esempio di callout Java che illustra i pattern di base di gestione degli errori personalizzati. L'esempio restituisce un messaggio di errore personalizzato quando si verifica un'eccezione. Inoltre, inserisce lo stacktrace di errori in una variabile di flusso, che può essere una pratica tecnica di debug.
Scarica il progetto
Per semplificare le cose, puoi scaricare questo progetto dal repository api-platform-samples di Apigee su GitHub.
- Scarica o clona api-platform-samples nel tuo sistema.
- 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 nell'attuale contesto del flusso perimetrale con il metodo messageContext.setVariable()
. Per restituire informazioni personalizzate sull'errore, crea un'istanza ExecutionResult
e chiama dei metodi su di essa 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.
- Assicurati di aver installato Maven:
mvn -version
- Esegui lo script
java-error/buildsetup.sh
. Questo script installa le dipendenze JAR richieste nel repository Maven locale. - cd alla directory
java-error/callout
. - Esegui Maven:
mvn clean package
- Se vuoi, verifica che il file JAR
edge-custom-policy-java-error.jar
sia stato copiato injava-error/apiproxy/resources/java
. Questa è la posizione richiesta per i file JAR di cui vuoi eseguire il deployment con un proxy.
Compila con javac
Se vuoi utilizzare javac
per compilare il codice, puoi fare un'operazione simile a questa (dalla directory java-error
). I file JAR richiesti ti vengono forniti nella directory java-error/lib
.
- da CD a
api-platform-samples/doc-samples/java-error
. - Assicurati che nel percorso sia presente javac.
javac -version
- 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
- Copia il file JAR nella directory apiproxy/resources/java. Questa è la posizione richiesta per i file JAR di cui vuoi eseguire il deployment con un proxy.
cp com/apigeesample/JavaProperties.class apiproxy/resources/java
Esegui il deployment e chiama il proxy
È stato fornito uno script di deployment nella directory ./java-error
. Ma prima di eseguirlo,
devi effettuare una rapida configurazione.
- da CD a
api-platform-samples/doc-samples/java-error
- Se non lo hai già fatto, apri il file
../../setup/setenv.sh
e modificalo come indicato con i dati del tuo account Apigee: il tuo nome utente (l'indirizzo email associato al tuo account), il nome della tua organizzazione e il dominio che utilizzi per effettuare chiamate alla gestione delle API. Ad esempio, per Edge Cloud, il dominio èhttps://api.enterprise.apigee.com
; tuttavia, il tuo dominio potrebbe essere diverso se utilizzi Edge Private Cloud. - Salva il file
setenv.sh
. - Esegui lo script di deployment:
./deploy.sh
- Se il deployment viene eseguito correttamente, esegui lo script di chiamata:
./invoke.sh
Lo script di chiamata chiama un comando cURL simile al seguente:
curl http://$org-$env.$api_domain/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!
- Titolo:
ExceptionClass: java.lang.RuntimeException