Esta página se aplica a Apigee y Apigee híbrido .
Ver la documentación de Apigee Edge .
¿Qué es una llamada de Java?
Si no tienes experiencia con las llamadas Java, te recomendamos que comiences con Cómo crear una llamada Java .
Manejo de errores en una llamada de Java
Al escribir una llamada Java, es posible que desee personalizar la gestión de errores en su código Java. Por ejemplo, puede que desee devolver mensajes de error y encabezados personalizados, o configurar variables de flujo con información de errores en el flujo proxy de Apigee.
Analicemos un ejemplo sencillo de una llamada de Java que ilustra patrones básicos de gestión de errores personalizados. El ejemplo devuelve un mensaje de error personalizado cuando se produce una excepción. Además, coloca el seguimiento de la pila de errores en una variable de flujo, lo cual puede ser una práctica técnica de depuración.
Descargar el proyecto
Para simplificar las cosas, puedes descargar este proyecto desde el repositorio api-platform-samples de Apigee en GitHub.
- Descargue o clone api-platform-samples en su sistema.
- En una terminal o editor de código de su elección, vaya al proyecto
api-platform-samples/doc-samples/java-error
.
El código Java de muestra
Los patrones de gestión de errores son sencillos. Puedes configurar variables de flujo en el contexto actual del flujo de Apigee con el método messageContext.setVariable()
. Para devolver información de error personalizada, construye una instancia ExecutionResult
e invoca métodos en ella para configurar la respuesta de error y los encabezados.
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 tu código con Maven
El proyecto está configurado para compilar con Maven. Si desea usar javac
, también incluiremos un ejemplo.
- Asegúrese de tener Maven instalado:
mvn -version
- Ejecute el script
java-error/buildsetup.sh
. Este script instala las dependencias JAR necesarias en su repositorio local de Maven. - cd al directorio
java-error/callout
. - Ejecutar Maven:
mvn clean package
- Si lo desea, verifique que el archivo JAR
edge-custom-policy-java-error.jar
se haya copiado ajava-error/apiproxy/resources/java
. Esta es la ubicación requerida para los archivos JAR que desea implementar con un proxy.
Implementar y llamar al proxy
Se proporciona un script de implementación en el directorio ./java-error
. Pero antes de ejecutarlo, debe realizar una configuración rápida.
- cd a
api-platform-samples/doc-samples/java-error
- La forma más sencilla de implementar el proxy es empaquetarlo en un archivo zip y subirlo a un entorno de su organización de Apigee. Consulte "Crear un proxy de API" . Asegúrese de usar la opción "Subir paquete de proxy" . Consulte también "Consejos y trucos para subir un proxy de API a un paquete de proxy" en la comunidad de Apigee.
- Cuando se implemente el proxy, intente llamarlo:
curl https://$HOSTNAME/java-error
Dado que la llamada no incluye un parámetro de consulta "nombre", el código Java genera un error de ejecución. El proxy devuelve este mensaje y encabezado:
- Mensaje de error:
Please specify a name parameter!
- Encabezado:
ExceptionClass: java.lang.RuntimeException