0

私はかなり長い間Velocityを使用していて、問題はありませんでした。しかし、最近、問題が発生しました。

私はvelocityを使用してHTMLコードを生成し、生成されたHTMLを電子メールとして送信しています。このプロセスは50%の時間で機能します。失敗すると、このエラーが発生します。

Caused by: java.lang.NullPointerException
        at java.io.Reader.<init>(Reader.java:61)
        at java.io.InputStreamReader.<init>(InputStreamReader.java:80)
        at org.apache.commons.collections.ExtendedProperties.load(ExtendedProperties.java:542)
        at org.apache.commons.collections.ExtendedProperties.load(ExtendedProperties.java:519)
        at org.apache.velocity.runtime.RuntimeInstance.setDefaultProperties(RuntimeInstance.java:397)
        at org.apache.velocity.runtime.RuntimeInstance.initializeProperties(RuntimeInstance.java:570)
        at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:250)
        at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:590)
        at org.apache.velocity.app.VelocityEngine.init(VelocityEngine.java:136)
        at testapp.webapp.utility.velocity.VelocitySettings.<init>(VelocitySettings.java:48)
        ... 26 more

私のコードは次のとおりです。

VelocityEngine ve = null;
try
{
Properties props = new Properties();
props.put("resource.loader", "file");
props.put("file.resource.loader.class", "org.apache.velocity.runtime.resource.loader.FileResourceLoader");
props.put("file.resource.loader.path", Settings.getVelocityTemplatesPath());
props.put("file.resource.loader.cache", "true");
props.put("runtime.log.logsystem.class","org.apache.velocity.runtime.log.NullLogSystem");


ve = new VelocityEngine();
ve.init(props); //THE ERROR IS TAKING PLACE HERE
}
catch (Exception e)
{
  throw new Exception ("Error while instantiating the velocity engine", e);
}

なぜそれがランダムに起こっているのか、私はまだ説明できません。私はこれについて少し調べましたが、まだ手がかりを見つけることができませんでした。誰かいますか?

4

2 に答える 2

1

問題を修正したようです。

残念ながら、上記の問題の説明では、非常に重要な詳細について言及するのを忘れていました。上記のコードは複数回実行されています。数十または数百のクォーツジョブを実行していますが、各ジョブは最終的に上記のコードを実行します。これは、起動された各ジョブがVelocityEngineを再起動することを意味します。この種の動作が上記のエラーを引き起こしている理由は、まだ私を超えています。この問題を解決するために、上記のコードは通常のJAVAクラスにあります。VelcoityEngineの開始が常に1回行われるように、そのクラスをシングルトンに変換する必要がありました。これらの変更後、エラーはストリーミングを停止しました。

于 2012-11-01T10:39:50.600 に答える
0

私は同じ問題に遭遇しました。私の場合、根本的な原因はテストマシンの無効なjenkinsキャッシュでした。それを削除した後、ベロシティは再び機能し始めました。

于 2015-11-12T10:32:17.537 に答える