Esta página se aplica a Apigee y Apigee Hybrid.
Consulta la documentación de
Apigee Edge.
¿Qué es una llamada de código Java?
Si no tienes experiencia con JavaCallout, te recomendamos que empieces con el artículo Cómo crear una llamada de código Java.
Gestionar errores en políticas JavaCallout
Cuando escribas una política JavaCallout, puede que quieras gestionar los errores de forma personalizada en tu código Java. Por ejemplo, puede que quieras devolver encabezados y mensajes de error personalizados o definir variables de flujo con información de error en el flujo del proxy en Apigee.
Vamos a ver un ejemplo sencillo de política JavaCallout 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. También coloca el seguimiento de pila de errores en una variable de flujo, lo que puede ser una técnica de depuración útil.
Descargar el proyecto
Para simplificar las cosas, puedes descargar este proyecto del repositorio api-platform-samples de Apigee en GitHub.
- Descarga o clona api-platform-samples en tu sistema.
- En el terminal o editor de código que prefieras, ve al proyecto
api-platform-samples/doc-samples/java-error
.
Código de muestra de Java
Los patrones de gestión de errores son sencillos. Puedes definir variables de flujo en el contexto de flujo de Apigee actual con el método messageContext.setVariable()
. Para devolver información de error personalizada, crea una instancia de ExecutionResult
y llama a sus métodos para definir la respuesta y los encabezados de error.
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 el código con Maven
El proyecto está configurado para que puedas compilarlo con Maven. Si quieres usar javac
, también incluiremos un ejemplo.
- Asegúrate de que tienes instalado Maven:
mvn -version
- Ejecuta la secuencia de comandos
java-error/buildsetup.sh
. Esta secuencia de comandos instala las dependencias JAR necesarias en tu repositorio Maven local. - Ve al directorio
java-error/callout
. - Ejecuta Maven:
mvn clean package
- Si quieres, comprueba que el archivo JAR
edge-custom-policy-java-error.jar
se haya copiado enjava-error/apiproxy/resources/java
. Esta es la ubicación obligatoria de los archivos JAR que quieras implementar con un proxy.
Implementar y llamar al proxy
Se proporciona una secuencia de comandos de implementación en el directorio ./java-error
. Pero antes de ejecutarlo, debes hacer una configuración rápida.
- cd a
api-platform-samples/doc-samples/java-error
- La forma más sencilla de desplegar el proxy es empaquetarlo en un archivo ZIP y subirlo a un entorno de tu organización de Apigee. Consulta Crear un proxy de APIs. Asegúrate de usar la opción Subir paquete proxy. Consulta también Consejos y trucos para subir un proxy de API en un paquete de proxy en la comunidad de Apigee.
- Cuando se haya implementado el proxy, prueba a llamarlo:
curl https://$HOSTNAME/java-error
Como la llamada no incluye un parámetro de consulta "name", el código Java genera un error de tiempo de ejecución. El proxy devuelve este mensaje y esta cabecera:
- Mensaje de error:
Please specify a name parameter!
- Encabezado:
ExceptionClass: java.lang.RuntimeException