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.
- Faça o download ou clone api-platform-samples no seu sistema.
- 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.
- Verifique se você tem o Maven instalado:
mvn -version
- Execute o script a
java-error/buildsetup.sh. Esse script instala as dependências JAR necessárias no seu repositório Maven local. - cd para o diretório
java-error/callout. - Execute o Maven:
mvn clean package
- Se você quiser, verifique se o arquivo JAR
edge-custom-policy-java-error.jarfoi copiado parajava-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.
- cd para
api-platform-samples/doc-samples/java-error - 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.
- 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