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 propriedademyPropertyserá 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çalhoorderIde 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/idextrai o valor do campoiddentro 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.idextrai o valor do campoiddentro 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 demyPropertyserá calculado pelo script Groovy, que retorna o valor do cabeçalhoorderIdincrementado 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 comoitemIdnas 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 chamadoiddentro de um corpo que é presumidamente uma estrutura de dados como um mapa (JSON ou similar). O valor extraído do campoidserá 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 valor12345do 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 chamadoide o insere como o valor da chaveid. -
${exchangeProperty.customerData}: recupera o valor armazenado na propriedadecustomerDatada troca e o atribui à chavejson. -
${exchangeProperty.orderData}: recupera o valor armazenado na propriedadeorderDatada 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]