Como processar erros da política JavaCallout

Esta página aplica-se ao Apigee e ao Apigee Hybrid.

Veja a documentação do Apigee Edge.

O que é um Java Callout?

Se for a primeira vez que usa JavaCallout, recomendamos que comece por ler o artigo Como criar um Java callout.

Processamento de erros nas políticas JavaCallout

Quando escreve uma política JavaCallout, pode querer fazer o processamento de erros personalizado no seu código Java. Por exemplo, pode querer devolver mensagens de erro e cabeçalhos personalizados e/ou definir variáveis de fluxo com informações de erro no fluxo do proxy no Apigee.

Vamos analisar um exemplo simples de uma política JavaCallout que ilustra padrões básicos de processamento de erros personalizados. O exemplo devolve uma mensagem de erro personalizada quando ocorre uma exceção. Também coloca o rastreio da pilha de erros numa variável de fluxo, o que pode ser uma técnica de depuração útil.

Transfira o projeto

Para simplificar, pode transferir este projeto do repositório api-platform-samples do Apigee no GitHub.

  1. Transfira ou clone api-platform-samples para o seu sistema.
  2. Num terminal ou num editor de código à sua escolha, aceda ao projeto api-platform-samples/doc-samples/java-error.

O exemplo de código Java

Os padrões de processamento de erros são simples. Pode definir variáveis de fluxo no contexto de fluxo do Apigee atual com o método messageContext.setVariable(). Para devolver informações de erro personalizadas, crie uma instância de ExecutionResult e chame métodos na mesma para definir a resposta e os cabeçalhos de erro.

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;
        }
    }
}


Compile o código com o Maven

O projeto está configurado para que possa compilar com o Maven. Se quiser usar javac, também incluímos um exemplo.

  1. Certifique-se de que tem o Maven instalado:
    mvn -version
  2. Execute o script java-error/buildsetup.sh. Este script instala as dependências JAR necessárias no seu repositório Maven local.
  3. cd para o diretório java-error/callout.
  4. Executar Maven:
    mvn clean package
  5. Se quiser, verifique se o ficheiro JAR edge-custom-policy-java-error.jar foi copiado para java-error/apiproxy/resources/java. Esta é a localização necessária para os ficheiros JAR que quer implementar com um proxy.

Implemente e chame o proxy

É fornecido um script de implementação no diretório ./java-error. No entanto, antes de o executar, tem de fazer uma configuração rápida.

  1. cd para api-platform-samples/doc-samples/java-error
  2. A forma mais simples de implementar o proxy é incluí-lo num ficheiro ZIP e carregar o pacote do proxy para um ambiente na sua organização do Apigee. Consulte o artigo Criar um proxy de API. Certifique-se de que usa a opção Carregar pacote de proxy. Veja também Sugestões e truques para carregar um proxy de API num pacote de proxies na comunidade do Apigee.
  3. Quando o proxy for implementado, experimente chamá-lo:
    curl  https://$HOSTNAME/java-error

    Uma vez que a chamada não inclui um parâmetro de consulta "name", o código Java gera um erro de tempo de execução. O proxy devolve esta mensagem e cabeçalho:

  • Mensagem de erro: Please specify a name parameter!
  • Cabeçalho: ExceptionClass: java.lang.RuntimeException