Cómo gestionar los errores de la política JavaCallout

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.

  1. Descarga o clona api-platform-samples en tu sistema.
  2. 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.

  1. Asegúrate de que tienes instalado Maven:
    mvn -version
  2. Ejecuta la secuencia de comandos java-error/buildsetup.sh. Esta secuencia de comandos instala las dependencias JAR necesarias en tu repositorio Maven local.
  3. Ve al directorio java-error/callout.
  4. Ejecuta Maven:
    mvn clean package
  5. Si quieres, comprueba que el archivo JAR edge-custom-policy-java-error.jar se haya copiado en java-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.

  1. cd a api-platform-samples/doc-samples/java-error
  2. 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.
  3. 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