Я перешел с FreeMarker на собственную утилиту генерации исходного кода Java. Источники доступны здесь:
https://source.mysema.com/svn/mysema/projects/codegen/trunk/
Он спроектирован таким образом, что вы просто вызываете API, и вывод корректно форматируется. Вот пример:
JavaWriter writer = new JavaWriter(new StringWriter());
writer.beginClass("FieldTests");
writer.privateField("String", "privateField");
writer.privateStaticFinal("String", "privateStaticFinal", "\"val\"");
writer.protectedField("String","protectedField");
writer.field("String","field");
writer.publicField("String","publicField");
writer.publicStaticFinal("String", "publicStaticFinal", "\"val\"");
writer.publicFinal("String", "publicFinalField");
writer.publicFinal("String", "publicFinalField2", "\"val\"");
writer.end();
Что превращается в
public class FieldTests {
private String privateField;
private static final String privateStaticFinal = "val";
protected String protectedField;
String field;
public String publicField;
public static final String publicStaticFinal = "val";
public final String publicFinalField;
public final String publicFinalField2 = "val";
}
Я разработал утилиту codegen для Querydsl , которая отображает типы доменов Java в типы запросов. Таким образом, потребности в сериализации очень сложны. Использование шаблонов FreeMarker просто не масштабировалось. В выводе было слишком много настроек, которые лучше контролировать в Java, чем синтаксис языка шаблонов.
Это не реклама модуля Codegen. Я просто хотел подчеркнуть, что для настраиваемой сериализации FreeMarker может не масштабироваться.