Manipulando Dados
Durante o roteamento e a mediação dos dados em trânsito, uma necessidade bastante comum é a de manipular, transformar e enriquece-los. O Camel fornece diversos mecanismos para esse fim, desde extensões disponíveis na própria Java DSL até processadores com capacidade de manipular diretamente os dados em trânsito.
Adicionar cabeçalhos (headers) através do método setHeader
é um exemplo bem comum desse tipo de manipulação:
from("direct:start")
.setHeader(Exchange.CONTENT_TYPE, constant("application/x-www-form-urlencoded"))
.setHeader(Exchange.HTTP_METHOD, constant("POST"))
// código
.to("http://meu.endpoint.rest")
O Camel oferece diferentes maneiras de manipular os dados em trânsito de maneira simples. Além do setHeader
mencionado acima, é possível citar:
bean
: para setar um bean que pode ser executado para transformar os dados ou definir o terminador da rota.pollEnrich
: para enriquecer um exchange com dados obtidos a partir de uma URI externa.process
: para passar os dados em trânsito para um processador, que pode transformar, enriquecer ou definir um terminador para a rota.setBody
: para setar valor do corpo da mensagem.setHeader
: para setar o valor de um cabeçalho.removeHeader
: para remover um cabeçalho.
Na Java DSL, quando uma definição de rota é criada a partir do método from
, é criado uma instância de uma especialização da ProcessorDefinition
. É possível verificar esses mecanismos de transformação e muitos verificando a API fornecida por essa classe abstrata.
Expressões
Em alguns casos, como o setBody
e o setHeader
, é necessário passar uma implementação de uma Expression
. Isso representa uma expressão que será resolvida durante o trânsito do dado pela rota.
Essas expressões podem definir tanto valores constantes quanto expressões nos mais variados tipos de linguages de expressões suportadas pelo Camel. Ao definir uma transformação de rota que receba uma expressão, é possível utilizar os seguintes métodos para instanciar a instância da expressão desejada:
constant()
: para definir uma expressão de valor constante.jsonpath()
: para definir uma expressão do tipo JSON Path.simple()
: para definir uma expressão do tipo Simple.xpath()
: para definir uma expressão do tipo XPath.
Outros tipos de expressões estão disponíveis e, pra casos mais complexos é possível implementar a sua própria expressão.