5

ローカルで問題なく動作するコードがいくつかありますが、リモート サーバーで実行しようとすると、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 を検索しましたが、答えが見つかりません。何か案は?

4

2 に答える 2

1

このコード[1]はより堅牢であるべきだと思います。Logging の設定にエラーがあると、速度エンジンは、アプリケーションの存続期間中、initialized=false および initializing=true という奇妙な状態になります。リソースマネージャーよりもロギングが最初に初期化される理由もわかりません。プロジェクトにバグを開くことを考えています。

[1] http://grepcode.com/file/repository.springsource.com/org.apache.velocity/com.springsource.org.apache.velocity/1.6.2/org/apache/velocity/runtime/RuntimeInstance.java #RuntimeInstance.init%28%29

于 2014-05-17T00:05:59.213 に答える