Como lidar com erros de chamada Java

Esta página se aplica ao Apigee e ao Apigee híbrido .

Veja a documentação do Apigee Edge .

O que é uma chamada Java?

Se você é novo em chamadas Java, recomendamos que comece com Como criar uma chamada Java .

Lidando com erros em uma chamada Java

Ao escrever uma chamada Java, você pode querer fazer um tratamento de erros personalizado no seu código Java. Por exemplo, você pode desejar retornar mensagens de erro e cabeçalhos personalizados e/ou definir variáveis ​​de fluxo com informações de erro no fluxo de proxy na Apigee.

Vamos analisar um exemplo simples de chamada Java que ilustra padrões básicos de tratamento de erros personalizados. O exemplo retorna uma mensagem de erro personalizada quando ocorre uma exceção. Ele também coloca o rastreamento de pilha de erros em uma variável de fluxo, o que pode ser uma técnica de depuração útil.

Baixe o projeto

Para simplificar, você pode baixar este projeto do repositório api-platform-samples da Apigee no GitHub.

  1. Baixe ou clone api-platform-samples para seu sistema.
  2. Em um terminal ou editor de código de sua escolha, acesse o projeto api-platform-samples/doc-samples/java-error .

O código Java de exemplo

Os padrões de tratamento de erros são simples. Você pode definir variáveis ​​de fluxo no contexto de fluxo atual da Apigee com o método messageContext.setVariable() . Para retornar informações de erro personalizadas, construa uma instância ExecutionResult e chame métodos nela para definir a resposta de erro e os cabeçalhos.

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 seu código com Maven

O projeto está configurado para que você possa compilar com Maven. Se quiser usar javac , incluiremos um exemplo também.

  1. Certifique-se de ter 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 desejar, verifique se o arquivo JAR edge-custom-policy-java-error.jar foi copiado para java-error/apiproxy/resources/java . Este é o local necessário para os arquivos JAR que você deseja implantar com um proxy.

Implantar e chamar o proxy

Um script de implantação é fornecido no diretório ./java-error . Mas antes de executá-lo, você precisa fazer uma configuração rápida.

  1. cd para api-platform-samples/doc-samples/java-error
  2. A maneira mais simples de implantar o proxy é agrupá-lo em um arquivo zip e carregá-lo em um ambiente da sua organização Apigee. Consulte "Criando um proxy de API" . Certifique-se de usar a opção "Carregar pacote de proxy" . Consulte também "Dicas e truques para carregar o proxy de API em um pacote de proxy" na comunidade Apigee.
  3. Quando o proxy for implantado, tente chamá-lo:
    curl  https://$HOSTNAME/java-error

    Como 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 retorna esta mensagem e cabeçalho:

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