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 JavaCallout, ti consigliamo di iniziare dalla sezione Come creare un callout Java.
Gestione degli errori nelle norme JavaCallout
Quando scrivi una norma JavaCallout, potresti voler gestire gli gestione degli errori personalizzati 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 criterio JavaCallout che illustra i pattern di base per la gestione degli errori personalizzata. L'esempio restituisce un messaggio di errore personalizzato quando si verifica un'eccezione. Inoltre, inserisce la traccia dello stack di errori in una variabile di flusso, che può essere una tecnica di debug utile.
Scaricare il progetto
Per semplificare le operazioni, puoi scaricare questo progetto dal repository api-platform-samples di Apigee su GitHub.
- Scarica o clona api-platform-samples sul 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 nel contesto di flusso Apigee corrente con il metodo messageContext.setVariable()
. Per restituire informazioni
sull'errore personalizzate, crea un'istanza ExecutionResult
e chiama i 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.
- Assicurati di aver installato Maven:
mvn -version
- Esegui lo script
java-error/buildsetup.sh
. Questo script installa le dipendenze JAR richieste nel tuo repository Maven locale. - Vai 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 che vuoi eseguire il deployment con un proxy.
Esegui il deployment e chiama il proxy
Nella directory ./java-error
viene fornito uno script di deployment. Ma prima di eseguirlo,
devi eseguire una rapida configurazione.
- cd a
api-platform-samples/doc-samples/java-error
- Il modo più semplice per eseguire il deployment del proxy è raggrupparlo in un file ZIP e caricare il bundle di proxy in un ambiente dell'organizzazione Apigee. Consulta Creazione di un proxy API. Assicurati di utilizzare l'opzione Carica pacchetto proxy. Vedi anche Suggerimenti per caricare il proxy API in un bundle proxy nella community Apigee.
- Una volta 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