top / index / prev / next / target / source
日記形式でつづる いがぴょんコラム ウェブページです。
Java 言語によるプログラミングのなかでテキストのテンプレート処理が必要な場面で役立つ OSS 実装の一つに Apache FreeMarker というプロダクトがあります。こちらが私が実現したかったテキストのテンプレート処理で役立ちそうだったので、これのシンプルな実装サンプルを作成します。
以下の手順に従い、Maven によるシンプルな Java プロジェクトを新規作成してください。
以下のように pom.xml
を変更します。(変更箇所のみ記載)
<dependencies>
<!-- 既存の記述... -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>[2.3.25-incubating,3.0)</version>
</dependency>
</dependencies>
以下のように Java ソースコードを開きます。
vi src/main/java/my/sandbox/App.java
以下のように App.java
を記述します。
package my.sandbox;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;
import freemarker.cache.TemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
public class App {
public static void main(String[] args) throws IOException, TemplateException {
final Configuration config = new Configuration(Configuration.VERSION_2_3_25);
config.setDefaultEncoding("UTF-8");
config.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
config.setLogTemplateExceptions(false);
// set my custom template loader.
config.setTemplateLoader(new TemplateLoader() {
private long lastModified = System.currentTimeMillis();
private static final String MY_TEMPLATE_STRING = "My name is ${user} desu.";
public Object findTemplateSource(String name) throws IOException {
System.out.println("TemplateName:" + name);
return MY_TEMPLATE_STRING;
}
public long getLastModified(Object templateSource) {
return lastModified;
}
public Reader getReader(Object templateSource, String encoding) throws IOException {
return new StringReader(MY_TEMPLATE_STRING);
}
public void closeTemplateSource(Object templateSource) throws IOException {
// do nothing.
}
});
final Map<String, String> templateData = new HashMap<String, String>();
templateData.put("user", "Taro Yamada");
final Template templateBase = config.getTemplate("basic");
templateBase.process(templateData, new OutputStreamWriter(System.out));
}
}
以下のコマンドで、作成した Java アプリケーションを実行することができます。
mvn install exec:java
Apache FreeMarker は基本的なテンプレート操作機能が備わっているように、今のところは感じています。
さあ、今年も、健康に1年が過ごせますように。