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.
- Baixe ou clone api-platform-samples para seu sistema.
- 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.
- Certifique-se de ter o Maven instalado:
mvn -version
- Execute o script
java-error/buildsetup.sh
. Este script instala as dependências JAR necessárias no seu repositório Maven local. - cd para o diretório
java-error/callout
. - Executar Maven:
mvn clean package
- Se desejar, verifique se o arquivo JAR
edge-custom-policy-java-error.jar
foi copiado parajava-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.
- cd para
api-platform-samples/doc-samples/java-error
- 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.
- 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