Como lidar com erros de política JavaCallout

Esta página se aplica à Apigee e à Apigee híbrida.

Confira a documentação da Apigee Edge.

O que é uma frase de destaque do Java?

Se você não conhece o JavaCallout, recomendamos começar com Como criar uma frase de destaque Java.

Como solucionar erros em políticas JavaCallout

Ao escrever uma política JavaCallout, é possível querer tratamento de erros personalizados no seu código Java. Por exemplo, convém 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.

Vejamos um exemplo simples de política JavaCallout que ilustra padrões básicos de tratamento de erros personalizados. A amostra 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 útil de depuração.

Fazer o download do projeto

Para simplificar, faça o download deste projeto do repositório api-platform-samples da Apigee no GitHub.

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

A amostra de código Java

Os padrões de tratamento de erros são simples. É possível 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, crie uma instância do ExecutionResult e chame métodos nela para definir a resposta e os cabeçalhos dos erros.

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 o Maven

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

  1. Verifique se você tem o Maven instalado:
    mvn -version
  2. Execute o script a java-error/buildsetup.sh. Esse script instala as dependências JAR necessárias no seu repositório Maven local.
  3. cd para o diretório java-error/callout.
  4. Execute o Maven:
    mvn clean package
  5. Se você quiser, 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ê quer 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 fazer upload do pacote de proxy em um ambiente na sua organização da Apigee. Consulte Como criar um proxy de API. Use a opção Fazer upload de pacote de proxy. Veja também Dicas e truques para fazer upload de proxy de API em um pacote proxy na comunidade Apigee.
  3. Quando o proxy estiver implantado, tente chamá-lo:
    curl  https://$HOSTNAME/java-error

    Como a chamada não inclui um parâmetro de consulta de "nome", 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