Freemarker
1. Visão Geral
O componente Freemarker (freemarker) monta um texto a partir de um modelo (template) na linguagem FreeMarker, que suporta condições, laços de repetição e formatação de dados — mais poderoso que o Message Formatter para textos complexos (por exemplo, gerar um corpo de e-mail em HTML com uma lista de itens de pedido).
Use quando precisar de lógica de template (condições, repetições) na montagem de um texto. Para substituições simples de variáveis, o Message Formatter é mais direto.
2. Pré-requisitos
Não há credenciais ou acessos externos — processamento local.
3. Autenticação e Conexão
Não aplicável.
4. Configuração / Operações Suportadas
O componente tem uma única operação: renderizar um template FreeMarker. O template é compilado uma única vez ao iniciar o fluxo (não recompila a cada execução).
| Campo | Obrigatório | Tipo | Descrição | Exemplo |
|---|---|---|---|---|
template | Sim, na prática | Texto (template FreeMarker) | O modelo a ser processado. Dentro do template, o corpo da mensagem de entrada fica disponível como body (interpretado como JSON, quando possível) e os headers como headers. Também estão disponíveis as funções UPPERCASE(texto) e LOWERCASE(texto). | "Olá ${body.cliente.nome}!" |
encoding | Não | Texto | Codificação de caracteres do template. Valor padrão: "UTF-8". | "UTF-8" |
locale | Não | Texto | Localidade usada no processamento do template (formatação de números, datas). Valor padrão: "en-US". | "pt-BR" |
timeZone | Não | Texto | Fuso horário usado no processamento do template. Valor padrão: "America/Sao_Paulo". | "America/Sao_Paulo" |
version | Não | Texto | Versão da linguagem FreeMarker. Valor padrão: "2.3.33". | "2.3.33" |
5. Exemplos Práticos
Exemplo simples: montar uma saudação personalizada usando dados do corpo da mensagem.
Entrada:
{
"cliente": { "nome": "Maria Silva" }
}
Configuração do componente:
{
"componentName": "freemarker",
"configurations": {
"template": "Olá ${body.cliente.nome}, seja bem-vinda!",
"locale": "pt-BR"
}
}
Resposta (o corpo da mensagem vira o texto processado):
"Olá Maria Silva, seja bem-vinda!"
Exemplo avançado: montar um resumo de pedido com uma lista de itens, usando um laço de repetição do template.
Entrada:
{
"pedidoId": 981,
"itens": [
{ "nome": "Produto A", "quantidade": 2 },
{ "nome": "Produto B", "quantidade": 1 }
]
}
Configuração do componente:
{
"componentName": "freemarker",
"configurations": {
"template": "Pedido ${body.pedidoId}:\n<#list body.itens as item>- ${item.nome} (x${item.quantidade})\n</#list>",
"locale": "pt-BR"
}
}
Resposta:
"Pedido 981:\n- Produto A (x2)\n- Produto B (x1)\n"
6. Erros Comuns e Troubleshooting
| Erro / Sintoma | Causa provável | Como resolver |
|---|---|---|
| Template renderiza vazio ou com erro | A sintaxe FreeMarker está incorreta, ou a expressão faz referência a um campo que não existe no body. | Revisar a sintaxe do template e conferir os nomes dos campos usados. |
| Erro de processamento do template | Falha interna do FreeMarker ao interpretar o template (sintaxe inválida) ou ao interpolar os dados. | Verificar a sintaxe do template FreeMarker e o formato do corpo de entrada. |
body disponível como texto puro em vez de objeto | O corpo de entrada não é um JSON válido; nesse caso ele é disponibilizado como string bruta. | Garantir que a mensagem de entrada seja um JSON válido, se o template espera acessar campos de body. |