0

我使用 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

看来我可能已经解决了这个问题。

不幸的是,在上面的问题陈述中,我忘了提到一个非常重要的细节。上面的代码被多次执行。我有 10 或 100 个石英作业正在运行,每个作业最终都会执行上面的代码。这意味着,每个触发的作业都将重新初始化 VelocityEngine。为什么这种行为导致上述错误仍然超出我的范围。为了克服这个问题,上面的代码驻留在一个普通的 JAVA 类中。我必须将该类转换为 Singleton,以便 VelcoityEngine 的启动始终完成一次。在这些更改之后,错误停止了流式传输。

于 2012-11-01T10:39:50.600 回答
0

我遇到了同样的问题。在我的情况下,根本原因是测试机器上无效的詹金斯缓存。删除它后,速度再次开始工作。

于 2015-11-12T10:32:17.537 回答