Freemarker

Поддерживается только производитель

Компонент freemarker : позволяет обрабатывать сообщение с использованием шаблона FreeMarker (opens in a new tab) . Это может быть идеальным решением при использовании шаблонизации для генерации ответов на запросы.

Пользователям Maven необходимо добавить следующую зависимость для pom.xmlэтого компонента:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-freemarker</artifactId>
    <version>x.x.x</version> <!-- use the same version as your Camel core version -->
</dependency>

URI format

freemarker:templateName[?options]

Где templateName -- это локальный URI classpath шаблона, который нужно вызвать; или полный URL удаленного шаблона (например: file://folder/myfile.ftl).

Configuring Options

Компоненты Camel настраиваются на двух отдельных уровнях:

  • уровень компонентов

  • уровень конечной точки

Configuring Component Options

На уровне компонентов задаются общие и общие конфигурации, которые затем наследуются конечными точками. Это самый высокий уровень конфигурации.

Например, компонент может иметь настройки безопасности, учетные данные для аутентификации, URL-адреса для сетевого подключения и т. д.

У некоторых компонентов всего несколько параметров, а у других -- много. Поскольку компоненты обычно имеют предустановленные значения по умолчанию, которые широко используются, зачастую вам может потребоваться настроить лишь несколько параметров компонента, а то и вовсе ни одного.

Вы можете настроить компоненты, используя:

  • Компонент DSL (opens in a new tab) .

  • в файле конфигурации ( application.propertiesфайлы *.yaml, и т.д.).

  • непосредственно в коде Java.

Configuring Endpoint Options

Настройка конечных точек обычно занимает больше времени, поскольку у них есть множество параметров. Эти параметры помогают вам настроить функции конечной точки. Параметры также классифицируются по тому, используется ли конечная точка как потребитель ( от ), как производитель ( от ) или и то, и другое.

Конечные точки чаще всего настраиваются непосредственно в URI конечной точки в виде параметров пути и запроса . Вы также можете использовать Endpoint DSL (opens in a new tab) и DataFormat DSL (opens in a new tab) в качестве типобезопасного способа настройки конечных точек и форматов данных в Java.

Хорошей практикой при настройке параметров является использование заполнителей свойств (opens in a new tab) .

Заполнители свойств обеспечивают несколько преимуществ:

  • Они помогают предотвратить использование жестко запрограммированных URL-адресов, номеров портов, конфиденциальной информации и других настроек.

  • Они позволяют вынести конфигурацию за пределы кода.

  • Они помогают коду стать более гибким и пригодным для повторного использования.

В следующих двух разделах перечислены все параметры, сначала для компонента, а затем для конечной точки.

Component Options

The Freemarker component supports 7 options, which are listed below.

allowContextMapAll (producer)

  • Определяет, должна ли карта контекста разрешать доступ ко всем данным. По умолчанию доступен только текст и заголовки сообщения. Этот параметр можно включить для полного доступа к текущему Exchange и CamelContext. Это может представлять потенциальную угрозу безопасности, поскольку открывает доступ ко всем возможностям API CamelContext.

  • По умолчанию: false

  • Тип: boolean

allowTemplateFromHeader (producer)

  • Разрешить или запретить использование шаблона ресурса из заголовка (по умолчанию -- false). Включение этого параметра позволяет указывать динамические шаблоны через заголовок сообщения. Однако это может рассматриваться как потенциальная уязвимость безопасности, если заголовок исходит от злоумышленника, поэтому используйте этот параметр с осторожностью.

  • По умолчанию: false

  • Тип: boolean

contentCache (producer)

  • Устанавливает, использовать ли кэш содержимого ресурсов или нет.

  • По умолчанию: true

  • Тип: boolean

lazyStartProducer (producer)

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: boolean

localizedLookup (producer)

  • Включает/отключает поиск локализованных шаблонов. По умолчанию отключено.

  • По умолчанию: false

  • Тип: boolean

autowiredEnabled (advanced)

  • Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: boolean

configuration (advanced)

  • Использовать существующий экземпляр freemarker.template.Configuration в качестве конфигурации.

  • По умолчанию:

  • Тип: Configuration

Endpoint Options

Конечная точка Freemarker настраивается с использованием синтаксиса URI:

freemarker:resourceUri

Со следующими параметрами пути и запроса :

Path Parameters (1 parameters)

resourceUri (producer)

  • Требуемый путь к ресурсу. Можно указать префикс: classpath, file, http, ref или bean. classpath, file и http загружают ресурс по этим протоколам (classpath используется по умолчанию). ref ищет ресурс в реестре. bean вызывает метод bean-компонента, который будет использоваться в качестве ресурса. Для bean-компонента можно указать имя метода после точки, например, bean:myBean.myMethod.

  • По умолчанию:

  • Тип: String

Query Parameters (7 parameters)

allowContextMapAll (producer)

  • Тип: Определяет, должна ли карта контекста разрешать доступ ко всем данным. По умолчанию доступен только текст и заголовки сообщения. Этот параметр можно включить для полного доступа к текущему Exchange и CamelContext. Это может представлять потенциальную угрозу безопасности, поскольку открывает доступ ко всем возможностям API CamelContext.

  • По умолчанию: false

  • Тип: boolean

allowTemplateFromHeader (producer)

  • Разрешить или запретить использование шаблона ресурса из заголовка (по умолчанию -- false). Включение этого параметра позволяет указывать динамические шаблоны через заголовок сообщения. Однако это может рассматриваться как потенциальная уязвимость безопасности, если заголовок исходит от злоумышленника, поэтому используйте этот параметр с осторожностью.

  • По умолчанию: false

  • Тип: boolean

configuration (producer)

  • Задает используемую конфигурацию Freemarker

  • По умолчанию:

  • Тип: Configuration

contentCache (producer)

  • Устанавливает, использовать ли кэш содержимого ресурсов или нет.

  • По умолчанию: true

  • Тип: boolean

encoding (producer)

  • Устанавливает кодировку, используемую для загрузки файла шаблона.

  • По умолчанию:

  • Тип: String

templateUpdateDelay (producer)

  • Количество секунд, в течение которых загруженный ресурс шаблона будет оставаться в кэше.

  • По умолчанию:

  • Тип: int

lazyStartProducer (producer (advanced))

  • Тип: Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: boolean

Message Headers

Компонент Freemarker поддерживает 3 заголовка сообщения, которые перечислены ниже:

CamelFreemarkerResourceUri (producer)

Constant: FREEMARKER_RESOURCE_URI (opens in a new tab)

  • URI для ресурса шаблона, который будет использоваться вместо настроенной конечной точки.

  • По умолчанию:

  • Тип: String

CamelFreemarkerTemplate (producer)

Constant: FREEMARKER_TEMPLATE (opens in a new tab)

  • Шаблон, который следует использовать вместо настроенной конечной точки.

  • По умолчанию:

  • Тип: String

CamelFreemarkerDataModel (producer)

Constant: FREEMARKER_DATA_MODEL (opens in a new tab)

  • Тип: Модель данных.

  • По умолчанию:

  • Тип: Object

Headers

Заголовки, заданные во время оценки FreeMarker, возвращаются в сообщение и добавляются в качестве заголовков. Это позволяет компоненту FreeMarker возвращать значения в сообщение.

Например, задайте значение заголовка fruitв шаблоне FreeMarker:

${request.setHeader('fruit', 'Apple')}

Заголовок fruit теперь доступен из message.out.headers.

Usage

FreeMarker Context

Camel предоставит информацию об обмене в контексте FreeMarker (только Map). Она Exchangeпередается как:

exchange

  • Сам Exchangeпо себе.

exchange.properties

  • Свойства Exchange.

variables

  • Переменные

headers

  • Заголовки входящего сообщения.

camelContext

  • Контекст Camel

request

  • Сообщение

body

  • Текст сообщения

response

  • Сообщение Out (только для шаблона обмена сообщениями InOut).

Вы можете настроить свой собственный контекст FreeMarker в заголовке сообщения с помощью ключа « CamelFreemarkerDataModel » следующим образом:

Map<String, Object> variableMap = new HashMap<String, Object>();
variableMap.put("headers", headersMap);
variableMap.put("body", "Monday");
variableMap.put("exchange", exchange);
exchange.getIn().setHeader("CamelFreemarkerDataModel", variableMap);

Hot reloading

Ресурс шаблона FreeMarker по умолчанию не поддерживает горячую перезагрузку ни для файловых ресурсов, ни для ресурсов classpath (расширенный jar). Если указать contentCache=false, Camel не будет кэшировать ресурс, и горячая перезагрузка будет включена. Этот сценарий можно использовать при разработке.

Dynamic templates

Camel предоставляет два заголовка, с помощью которых можно определить местоположение ресурса для шаблона или самого его содержимого. Если установлен какой-либо из этих заголовков, Camel использует его для ресурса, настроенного в конечной точке. Это позволяет предоставлять динамический шаблон во время выполнения.

Examples

Например, вы можете использовать что-то вроде:

from("activemq:My.Queue").
  to("freemarker:com/acme/MyResponse.ftl");

Использовать шаблон FreeMarker для формулировки ответа на сообщение при обмене сообщениями InOut (где есть JMSReplyToзаголовок).

Если вы хотите использовать InOnly, получить сообщение и отправить его по другому адресу, вы можете использовать:

from("activemq:My.Queue").
  to("freemarker:com/acme/MyResponse.ftl").
  to("activemq:Another.Queue");

И чтобы отключить кэширование контента, например, для использования в разработке, когда .ftlшаблон должен перезагружаться в горячем режиме:

from("activemq:My.Queue").
  to("freemarker:com/acme/MyResponse.ftl?contentCache=false").
  to("activemq:Another.Queue");

И файловый ресурс:

from("activemq:My.Queue").
  to("freemarker:file://myfolder/MyResponse.ftl?contentCache=false").
  to("activemq:Another.Queue");

Можно указать, какой шаблон должен использовать компонент, динамически через заголовок, например:

from("direct:in").
  setHeader(FreemarkerConstants.FREEMARKER_RESOURCE_URI).constant("path/to/my/template.ftl").
  to("freemarker:dummy?allowTemplateFromHeader=true");

The Email Example

В этом примере мы хотим использовать шаблон FreeMarker для письма с подтверждением заказа. Шаблон письма в FreeMarker выглядит следующим образом:

Dear ${headers.lastName}, ${headers.firstName}

Spring Boot Auto-Configuration

При использовании freemarker с Spring Boot обязательно используйте следующую зависимость Maven для поддержки автоматической настройки:

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-freemarker-starter</artifactId>
  <version>x.x.x</version>
  <!-- use the same version as your Camel core version -->
</dependency>

Компонент поддерживает 8 опций, которые перечислены ниже.

camel.component.freemarker.allow-context-map-all

  • Тип: Определяет, должна ли карта контекста разрешать доступ ко всем данным. По умолчанию доступен только текст и заголовки сообщения. Этот параметр можно включить для полного доступа к текущему Exchange и CamelContext. Это может представлять потенциальную угрозу безопасности, поскольку открывает доступ ко всем возможностям API CamelContext.

  • По умолчанию: false

  • Тип: Boolean

camel.component.freemarker.allow-template-from-header

  • Разрешить или запретить использование шаблона ресурса из заголовка (по умолчанию -- false). Включение этого параметра позволяет указывать динамические шаблоны через заголовок сообщения. Однако это может рассматриваться как потенциальная уязвимость безопасности, если заголовок исходит от злоумышленника, поэтому используйте этот параметр с осторожностью.

  • По умолчанию: false

  • Тип: Boolean

camel.component.freemarker.autowired-enabled

  • Включено ли автоматическое связывание. Это используется для параметров автоматического связывания (параметр должен быть помечен как autowired) путём поиска в реестре экземпляра соответствующего типа, который затем настраивается в компоненте. Это может использоваться для автоматической настройки источников данных JDBC, фабрик JMS-подключений, клиентов AWS и т. д.

  • По умолчанию: true

  • Тип: Boolean

camel.component.freemarker.configuration

  • Использовать существующий экземпляр freemarker.template.Configuration в качестве конфигурации. Параметр -- это тип freemarker.template.Configuration.

  • По умолчанию:

  • Тип: Configuration

camel.component.freemarker.content-cache

  • Устанавливает, использовать ли кэш содержимого ресурсов или нет.

  • По умолчанию: true

  • Тип: Boolean

camel.component.freemarker.enabled

  • Включить ли автоматическую настройку компонента freemarker. По умолчанию эта функция включена.

  • По умолчанию:

  • Тип: Boolean

camel.component.freemarker.lazy-start-producer

  • Следует ли запускать производитель в режиме ленивого запуска (при первом сообщении). Запуск в режиме ленивого запуска позволяет разрешить запуск CamelContext и маршрутов в ситуациях, когда производитель может выйти из строя при запуске, что приведет к сбою запуска маршрута. Отложив запуск в режим ленивого запуска, можно обработать сбой запуска во время маршрутизации сообщений с помощью обработчиков ошибок маршрутизации Camel. Имейте в виду, что после обработки первого сообщения создание и запуск производителя могут занять некоторое время и увеличить общее время обработки.

  • По умолчанию: false

  • Тип: Boolean

camel.component.freemarker.localized-lookup

  • Включает/отключает поиск локализованных шаблонов. По умолчанию отключено.

  • По умолчанию: false

  • Тип: Boolean