ローカルで問題なく動作するコードがいくつかありますが、リモート サーバーで実行しようとすると、null ポインター例外がスローされます。これは、Velocity からテンプレートを取得しようとするときに行われます。初めて失敗し、その後は毎回失敗します。
問題のコードは次のビットです。
URL location = Thread.currentThread().getContextClassLoader().getResource("velocity.properties");
String fullPath = location.getPath();
log.debug("Path: " + fullPath);
Velocity.init(fullPath);
Template tmplt = Velocity.getTemplate( "template.html" ); //This line throws the error
ロギングはパスが正しいことを示しており、ファイルがそこにあることを確認できます。
速度の初期化に使用されるプロパティ ファイルには、次のものが含まれます。
resource.loader = file
file.resource.loader.class = org.apache.velocity.runtime.resource.loader.FileResourceLoader
file.resource.loader.path=/var/lib/tomcat6/webapps/geoip/WEB-INF/templates/template.html
file.resource.loader.cache = true
input.encoding=UTF-8
output.encoding=UTF-8
エラーのスタック トレースは次のようになります。
SEVERE: Servlet.service() for servlet Jersey REST Service threw exception
java.lang.NullPointerException
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1533)
at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:1514)
at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:299)
at org.apache.velocity.app.Velocity.getTemplate(Velocity.java:358)
at ca.company.ipservice.models.MyClass.toHTML(MyClass.java:48)
Google で検索して StackOverflow を検索しましたが、答えが見つかりません。何か案は?