Como solucionar erros de chamada do Java

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

O que é uma frase de destaque do 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 do Java, é possível querer lidar com erros personalizados no seu código Java. Por exemplo, talvez você queira 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 frase de destaque 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 atual do fluxo do Edge 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 o Maven está 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 você ainda não tiver feito isso, abra o arquivo ../../setup/setenv.sh e edite-o conforme indicado nas informações da sua conta da Apigee: seu nome de usuário (o endereço de e-mail associado à sua conta), o nome da organização e o domínio usado para fazer chamadas de gerenciamento de API. Por exemplo, para a nuvem de borda, 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 tem a seguinte aparência:

    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