VelocityテンプレートエンジンのResourceNotFoundExceptionについて
2010/01/20 19:08Update
Velocityテンプレートエンジンを利用する際に、ResourceNotFoundException異常が投げ出された時の対処方法について。
Velocityテンプレートエンジンについて
Apache Velocity - 高機能なJavaベースのテンプレートエンジン
例:
が実行されるとき、次のようなResourceNotFoundExceptionが投げ出されました。
ResourceNotFoundException異常例:
プロジェクト(ソース)階層例:
src/com/test/velocity/someTemplate.vm
src/com/test/velocity/TestVelocity.class
になっています。無論、srcはclasspathに通っています。
コンパイル後の階層例:
classes/com/test/velocity/someTemplate.vm
classes/com/test/velocity/TestVelocity.class
調査した結果、リソースはどこにあるかをVelocityに知らせていないことが原因らしいです。
一応、解決策として、次のようなコードを追加すれば解決できます。
興味があれば、次の記事もご覧を。
テンプレートエンジンApache Velocityを使おう - VelocityでDAOの自動生成ツールを作成
Apache Velocity - 高機能なJavaベースのテンプレートエンジン
例:
Template template = Velocity.getTemplate("com/test/velocity/someTemplate.vm", "UTF-8");
が実行されるとき、次のようなResourceNotFoundExceptionが投げ出されました。
ResourceNotFoundException異常例:
Exception in thread "main" org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'com/test/velocity/someTemplate.vm'
at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:452)
at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:335)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1102)
at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:324)
at org.apache.velocity.app.Velocity.getTemplate(Velocity.java:524)
at TestVelocity.main(TestVelocity.java:57)
at org.apache.velocity.runtime.resource.ResourceManagerImpl.loadResource(ResourceManagerImpl.java:452)
at org.apache.velocity.runtime.resource.ResourceManagerImpl.getResource(ResourceManagerImpl.java:335)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1102)
at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:324)
at org.apache.velocity.app.Velocity.getTemplate(Velocity.java:524)
at TestVelocity.main(TestVelocity.java:57)
プロジェクト(ソース)階層例:
src/com/test/velocity/someTemplate.vm
src/com/test/velocity/TestVelocity.class
になっています。無論、srcはclasspathに通っています。
コンパイル後の階層例:
classes/com/test/velocity/someTemplate.vm
classes/com/test/velocity/TestVelocity.class
調査した結果、リソースはどこにあるかをVelocityに知らせていないことが原因らしいです。
一応、解決策として、次のようなコードを追加すれば解決できます。
Properties p = new Properties();
p.setProperty("resource.loader", "class");
p.setProperty("class.resource.loader.class",
"org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
p.setProperty("input.encoding", "UTF-8");
Velocity.init(p);
興味があれば、次の記事もご覧を。
テンプレートエンジンApache Velocityを使おう - VelocityでDAOの自動生成ツールを作成
Sponsored Link
- Relative Articles
- Jakarta Commons NETによるFTP処理(FTPClient) - (2009/01/28 19:40)
- DTDファイル処理 - DTDParser - Java DTD パーサー - (2009/01/30 17:48)
- テンプレートエンジンfreemarkerでRSSを出力してみる - (2009/02/06 13:59)
- Apache Commons EmailによるEメール送信 - (2009/02/06 17:51)
- Apache Commons Digesterを使おう - サンプルから学ぶXML文書の読み込み - (2009/02/09 17:09)
- テンプレートエンジンApache Velocityを使おう - VelocityでDAOの自動生成ツールを作成 - (2009/02/10 11:12)
- Jakarta Commons によるHTTP処理(HttpClient) - (2009/02/17 15:14)
- Apache MINAを使ってみよう - Apache MINAで簡易なサーバ作成 - (2009/03/05 17:59)
- 全文検索システムApache Luceneを使ってみる - (2009/04/11 13:45)
- PSD-parser - JavaでPSDファイルを抽出するためのライブラリ - (2009/04/21 00:09)