Set Property
O EIP Set Property é utilizado no contexto da troca de mensagens (exchange). Propriedades são úteis para armazenar dados intermediários que podem ser acessados em outras etapas do fluxo.
As propriedades são metadados associadas à mensagem, mas não fazem parte nem do corpo nem do cabeçalho da mensagem. |
Parâmetros
Parâmetro | Descrição | Valor padrão | Tipo |
---|---|---|---|
Name |
Nome da propriedade que será configurada. |
String |
|
Expression |
Expressão que retorna o valor da propriedade. |
ExpressionDefinition |
Expression
A expression permite calcular ou definir valores dinamicamente durante o processamento de mensagens no fluxo de integração. Ela é uma forma de configurar comportamentos que podem variar de acordo com o contexto da mensagem em trânsito.
A expressão está organizada em dois níveis hierárquicos que permitem que a estrutura seja mais extensível e adaptável a diferentes contextos:
-
Primeiro nível: especifica o tipo de lógica que será aplicada (constant, simple, jsonpath etc).
-
Segundo nível: define o valor efetivo da expressão, ou seja, o dado que será atribuído à propriedade.
Tipos comuns de expressions
-
constant
: atribui valores fixos. No exemplo, a propriedademyProperty
será definida comoFixedValue
.
- setProperty:
name: myProperty
expression:
constant: "FixedValue"
-
simple
: acessa dados simples (cabeçalhos, corpo, propriedades) e manipula valores de maneira básica. No exemplo, a expressão${header.orderId}
acessa o cabeçalhoorderId
e o usa como valor da propriedademyProperty
.
- setProperty:
name: myProperty
expression:
simple: ${header.orderId}
-
xpath
: usa consultas XPath para extrair dados de documentos XML. No exemplo, a expressão XPath/order/id
extrai o valor do campoid
dentro de um XML com a estrutura<order><id>123</id></order>
.
- setProperty:
name: myProperty
expression:
xpath: "/order/id"
-
jsonpath
: usa consultas JSONPath para extrair dados de documentos JSON. No exemplo, a expressão$.order.id
extrai o valor do campoid
dentro de um objeto JSON:{ "order": { "id": 123 } }
.
- setProperty:
name: myProperty
expression:
jsonpath: "$.order.id"
-
groovy
: executa scripts Groovy para manipulação avançada de dados. No exemplo, o valor demyProperty
será calculado pelo script Groovy, que retorna o valor do cabeçalhoorderId
incrementado de 1.
- setProperty:
name: myProperty
expression:
groovy: "return message.getHeader('orderId') + 1"
Exemplos
Exemplo 1
- setProperty:
name: itemId
expression:
simple: ${body['id']}
-
name: itemId
: nome da propriedade que será definida. A propriedade será referenciada comoitemId
nas próximas etapas da rota. -
expression: simple: ${body['id']}
: usa a linguagem simples para extrair dados do corpo da mensagem (body). Neste caso, está acessando um campo chamadoid
dentro de um corpo que é presumidamente uma estrutura de dados como um mapa (JSON ou similar). O valor extraído do campoid
será atribuído à propriedadeitemId
.Imagine que o corpo da mensagem seja algo como:
{ "id": "12345", "name": "Sample Item" }
-
O Camel irá avaliar a expressão
${body['id']}
e extrair o valor12345
do campoid
. -
Esse valor será armazenado na propriedade chamada
itemId
.
-
Exemplo 2
- setProperty:
id: setProperty-1014206318
name: fullData
expression:
simple: >-
{"id": "${header.id}", "json": ${exchangeProperty.customerData},
"xml": ${exchangeProperty.orderData}}
-
name
: nome da propriedade que será criada ou atualizada no contexto da troca. Neste caso, a propriedade será chamadafullData
. -
expression
: define o valor da propriedade usando uma expressão. Neste caso, é utilizada uma expressão em linguagem simples.-
"${header.id}"
: extrai o valor do cabeçalho chamadoid
e o insere como o valor da chaveid
. -
${exchangeProperty.customerData}
: recupera o valor armazenado na propriedadecustomerData
da troca e o atribui à chavejson
. -
${exchangeProperty.orderData}
: recupera o valor armazenado na propriedadeorderData
da troca e o atribui à chavexml
. -
A expressão cria um objeto JSON que combina informações de diferentes partes da mensagem em um formato consolidado, como este exemplo:
{ "id": "12345", "json": {"name": "John Doe", "age": 30}, "xml": "<order><id>123</id><total>100.00</total></order>" }
-
O uso de ">-", no início da expressão, mantém o texto legível no YAML, pois garante que o valor processado seja tratado como uma única linha sem quebras desnecessárias. |
Share your suggestions with us!
Click here and then [+ Submit idea]