FreemarkerConfig.java
package no.nav.data.common.template;
import freemarker.template.Configuration;
import freemarker.template.TemplateExceptionHandler;
import lombok.extern.slf4j.Slf4j;
import no.nav.data.common.exceptions.TechnicalException;
import no.nav.data.team.notify.dto.Model;
import org.springframework.context.annotation.Bean;
import org.springframework.core.io.ClassPathResource;
import java.io.StringWriter;
@Slf4j
@org.springframework.context.annotation.Configuration
public class FreemarkerConfig {
@Bean
public FreemarkerService freemarkerService() {
return new FreemarkerService();
}
private Configuration freemarkerConfig() {
try {
var config = new Configuration(Configuration.VERSION_2_3_30);
config.setClassForTemplateLoading(this.getClass(), "/template/freemarker");
config.setWrapUncheckedExceptions(true);
dev(config);
return config;
} catch (Exception e) {
log.debug(e.getMessage(), e);
throw new TechnicalException("io error", e);
}
}
private void dev(Configuration config) {
config.setTemplateExceptionHandler(TemplateExceptionHandler.HTML_DEBUG_HANDLER);
config.setLogTemplateExceptions(false);
}
public class FreemarkerService {
private final Configuration cfg;
public FreemarkerService() {
cfg = freemarkerConfig();
}
public String generate(Model model) {
try (var writer = new StringWriter()) {
var template = cfg.getTemplate(model.getTemplate().getTemplateName());
template.process(model, writer);
return writer.toString();
} catch (Exception e) {
TechnicalException freemarkerError = new TechnicalException("io error", e);
log.error("Unable to generate String from freemarker template for model {}", model);
log.error(e.getMessage(), e);
throw freemarkerError;
}
}
}
}