Como solucionar erros de chamada do Java

Você está lendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
info

O que é uma chamada de Java?

Se você é iniciante nas chamadas do Java, comece com Como criar uma frase de destaque Java.

Como solucionar erros em uma chamada do Java

Ao escrever uma chamada de Java, é possível querer fazer tratamento de erros personalizado 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 no Edge.

Vejamos um exemplo simples de chamada de Java 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 do Edge com o messageContext.setVariable() método. 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.

Compilar com javac

Se você quiser usar javac para compilar o código, faça algo semelhante ao seguinte (do diretório java-error). Os arquivos JAR necessários são fornecidos a você no diretório java-error/lib.

  1. cd para api-platform-samples/doc-samples/java-error.
  2. Verifique se você tem javac no seu caminho.

    javac -version
  3. Execute o seguinte comando javac:

    javac -d . -classpath ./lib/expressions-1.0.0.jar:./lib/message-flow-1.0.0.jar:. callout/src/main/java/JavaProperties.java
  4. Copie o arquivo JAR para o diretório apiproxy/resources/java. Esse é o local necessário para os arquivos JAR que você quer implantar com um proxy.

    cp com/apigeesample/JavaProperties.class apiproxy/resources/java

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. Se ainda não tiver feito isso, abra o arquivo ../../setup/setenv.sh e edite o conforme indicado com as informações da sua conta da Apigee: nome de usuário (o endereço de e-mail associado à sua conta), nome da organização e o domínio usado para fazer chamadas de gerenciamento de API. Por exemplo, para a nuvem do Edge, o domínio é https://api.enterprise.apigee.com. No entanto, seu domínio poderá ser diferente se você estiver usando a nuvem privada do Edge.
  3. Salve o arquivo setenv.sh.
  4. Execute o script de implantação:
    ./deploy.sh
  5. Se a implantação for bem-sucedida, execute o script de invocação:
    ./invoke.sh

    O script de invocação chama um comando cURL que se parece com este:

    curl  http://$org-$env.$api_domain/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