You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2025/12/11 06:11:00 UTC

[jira] [Resolved] (CAMEL-22772) Freemarker shared variables not respected when using dynamic templates

     [ https://issues.apache.org/jira/browse/CAMEL-22772?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Claus Ibsen resolved CAMEL-22772.
---------------------------------
    Resolution: Fixed

> Freemarker shared variables not respected when using dynamic templates
> ----------------------------------------------------------------------
>
>                 Key: CAMEL-22772
>                 URL: https://issues.apache.org/jira/browse/CAMEL-22772
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-freemarker
>    Affects Versions: 4.16.0
>            Reporter: Bartosz Popiela
>            Priority: Minor
>             Fix For: 4.14.3, 4.17.0
>
>
> I have a ComponentCustomizer which provides a custom Freemarker method:
> {code:java}
> @BindToRegistry(lazy=true)
> public ComponentCustomizer freemarkerCustomizer(@BeanInject CacheService cacheService) {
>     return new ComponentCustomizer() {
>         private final BeansWrapper beansWrapper =
>                 new BeansWrapperBuilder(freemarker.template.Configuration.DEFAULT_INCOMPATIBLE_IMPROVEMENTS).build();
>         @Override
>         public void configure(String name, Component component) {
>             try {
>                 configure((FreemarkerComponent) component);
>             } catch (TemplateModelException e) {
>                 throw new RuntimeException(e);
>             }
>         }
>         private void configure(FreemarkerComponent component) throws TemplateModelException {
>             var configuration = component.getConfiguration();
>             configuration.setRecognizeStandardFileExtensions(true);
>             configuration.setRegisteredCustomOutputFormats(List.of(SafeJsonOutputFormat.INSTANCE));
>             configuration.setSharedVariable("customMethod", new MyCustomMethod());
>             component.setConfiguration(configuration); // This is necessary because FreemarkerComponent#getConfiguration returns a cloned object
>         }
>         @Override
>         public boolean isEnabled(String name, Component target) {
>             return target instanceof FreemarkerComponent;
>         }
>     };
> } {code}
> When passing a template with the CamelFreemarkerTemplate header, FreemarkerEndpoint creates a new freemarker.template.Configuration which doesn't provide my customMethod.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)