我已经使用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);
}
我仍然无法解释为什么它会随机发生。我研究了一下这个但是找不到任何线索。在那里有人吗?
答案 0 :(得分:1)
似乎我可能已经解决了这个问题。
不幸的是,在上面的问题陈述中,我忘了提一个非常重要的细节。上面的代码正在执行多次。我有10或100个石英作业在运行,每个作业最终都会执行上面的代码。这意味着,每个被解雇的作业都将重新启动VelocityEngine。为什么这种行为导致上述错误仍然超出我的范畴。为了克服这个问题,上面的代码驻留在一个普通的JAVA类中。我不得不将该类转换为Singleton,以便始终执行VelcoityEngine的启动。在这些更改之后,错误停止了流式传输。
答案 1 :(得分:0)
我遇到了同样的问题。在我的情况下,根本原因是测试机器上的无效jenkins缓存。删除后,速度再次开始工作。