Esta página aplica-se ao Apigee e ao Apigee Hybrid.
Veja a documentação do
Apigee Edge.
O que é um Java Callout?
Se for a primeira vez que usa JavaCallout, recomendamos que comece por ler o artigo Como criar um Java callout.
Processamento de erros nas políticas JavaCallout
Quando escreve uma política JavaCallout, pode querer fazer o processamento de erros personalizado no seu código Java. Por exemplo, pode querer devolver mensagens de erro e cabeçalhos personalizados e/ou definir variáveis de fluxo com informações de erro no fluxo do proxy no Apigee.
Vamos analisar um exemplo simples de uma política JavaCallout que ilustra padrões básicos de processamento de erros personalizados. O exemplo devolve uma mensagem de erro personalizada quando ocorre uma exceção. Também coloca o rastreio da pilha de erros numa variável de fluxo, o que pode ser uma técnica de depuração útil.
Transfira o projeto
Para simplificar, pode transferir este projeto do repositório api-platform-samples do Apigee no GitHub.
- Transfira ou clone api-platform-samples para o seu sistema.
- Num terminal ou num editor de código à sua escolha, aceda ao projeto
api-platform-samples/doc-samples/java-error
.
O exemplo de código Java
Os padrões de processamento de erros são simples. Pode definir variáveis de fluxo no contexto de fluxo do Apigee atual com o método messageContext.setVariable()
. Para devolver informações de erro personalizadas, crie uma instância de ExecutionResult
e chame métodos na mesma para definir a resposta e os cabeçalhos de erro.
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 o código com o Maven
O projeto está configurado para que possa compilar com o Maven. Se quiser usar javac
, também incluímos um exemplo.
- Certifique-se de que tem 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 quiser, verifique se o ficheiro JAR
edge-custom-policy-java-error.jar
foi copiado parajava-error/apiproxy/resources/java
. Esta é a localização necessária para os ficheiros JAR que quer implementar com um proxy.
Implemente e chame o proxy
É fornecido um script de implementação no diretório ./java-error
. No entanto, antes de o executar,
tem de fazer uma configuração rápida.
- cd para
api-platform-samples/doc-samples/java-error
- A forma mais simples de implementar o proxy é incluí-lo num ficheiro ZIP e carregar o pacote do proxy para um ambiente na sua organização do Apigee. Consulte o artigo Criar um proxy de API. Certifique-se de que usa a opção Carregar pacote de proxy. Veja também Sugestões e truques para carregar um proxy de API num pacote de proxies na comunidade do Apigee.
- Quando o proxy for implementado, experimente chamá-lo:
curl https://$HOSTNAME/java-error
Uma vez que 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 devolve esta mensagem e cabeçalho:
- Mensagem de erro:
Please specify a name parameter!
- Cabeçalho:
ExceptionClass: java.lang.RuntimeException