Se seu código lançar outras classes de exceções verificadas, elas deverão ser capturadas e emitidas novamente como MbException. Geralmente, você usa a classe MbUserException, conforme mostrado no código de exemplo. MbUserException é uma subclasse de MbException e tem um construtor público. As funções do utilitário WebSphere Message Broker podem lançar outras subclasses de MbException que têm construtores privados.
Para obter informações sobre o que acontece após o processamento do método evaluate(), consulte Manipulação de Erros Padrão.
Podem ocorrer exceções durante o processamento do fluxo de mensagens (durante o método evaluate()) e durante o método onInitialize(). Se você implementou o método onInitialize() e detectar um erro irrecuperável na configuração do nó, uma exceção da classe MbException será emitida e o fluxo falhará na inicialização. Seu fluxo falhará na implementação e uma mensagem de erro BIP4157 será emitida ou o fluxo não iniciará e não aparecerá na lista de fluxos em execução.
Não execute o código em um método onInitialize() que dependa de outro recurso externo que possa não estar ali porque o broker não tenta novamente as chamadas para esse método. Se for necessário inicializar uma conexão externa, por exemplo, inicialize-a durante a primeira chamada para o método evaluate(). Se a inicialização não funcionar, será possível lançar uma exceção que será manipulada como qualquer outra exceção de fluxo.
O código de exemplo a seguir mostra uma implementação simples de um nó JavaCompute que roteia uma mensagem CSV para os terminais out ou alt, com base em um campo de cabeçalho que contém um número positivo ou negativo. Se o texto no campo não for numérico, uma NumberFormatException será lançada. O código de exemplo mostra como essa exceção pode ser capturada e lançada como uma MbUserException para que a manipulação de MbException construída no WebSphere Message Broker a partir dos nós JavaCompute possa ser usada.
public void evaluate(MbMessageAssembly assembly) throws MbException {
MbOutputTerminal out = getOutputTerminal("out");
MbOutputTerminal alt = getOutputTerminal("alternate");
MbMessage message = assembly.getMessage();
int routeTo = 0;
try {
// ----------------------------------------------------------
// Incluir código do usuário abaixo
String routingValue = (String)message.evaluateXPath("string(/csv/header/route_to)");
routeTo = Integer.parseInt(routingValue);
// Fim do código do usuário
// ----------------------------------------------------------
} catch (java.lang.NumberFormatException e ) {
// Manipulação de exceção de exemplo
MbUserException mbue = new MbUserException(this, "evaluate()", "","", e.toString(), null);
throw mbue;
}
// O seguinte deve ser alterado somente
// se você não estiver propagando a mensagem para o terminal de 'saída'
if ( routeTo > 0 )
out.propagate(assembly);
else
alt.propagate(assembly);
}