2

我们的团队一直在遇到速度模板反复出现的问题。在渲染时,有些人会抛出带有消息“Template.merge() 失败 - 无法渲染速度模板,'/template.vm'”的 RuntimeException。我们无法重现该问题,并且网络上的文档非常不足。该问题并非始终可重现 - 其渲染有时会导致错误的相同模板也可以在其他时间无问题地显示。Template 类的源代码也没什么帮助。先感谢您。


编辑:根据 Nathan Bubna 的回复,我需要澄清我们使用的是 Velocity 1.4 版。


编辑:由于有人指出堆栈跟踪是有益的,所以这里是:

2008-09-15 11:07:57,336 错误速度 - Template.merge() 失败。文档为空,很可能是由于解析错误。2008-09-15 11:07:57,336 错误 VelocityResult - 无法呈现速度模板,'/search/[template-redacted].vm' java.lang.Exception: Template.merge() 失败。文档为空,很可能是由于解析错误。在 org.apache.velocity.Template.merge(Template.java:277) 在 com.opensymphony.webwork.dispatcher.VelocityResult.doExecute(VelocityResult.java:91) 在 com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport .java:109) 在 com.opensymphony.xwork.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:258) 在 com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:182) 在 com.opensymphony.xwork.interceptor。

4

5 回答 5

3

您使用的是什么版本的 Velocity?旧版本中有一些竞争条件导致了这种情况。大多数在 Velocity 1.5 版本中被压扁。虽然我个人建议使用 Velocity 1.6-beta1。它极大地提高了性能(内存和速度),并修复了许多没有进入 1.5 的小错误。

编辑:既然您说您使用的是 1.4,那么,是的,我确定这是我们修复的竞争条件。请考虑升级。1.6 绝对是您最好的选择,因为它修复了您的错误并提高了性能。1.6 final应该很快就出来了。

于 2008-10-17T22:00:23.167 回答
1

我现在正在我们的网站上处理相同的错误。

这似乎是一种竞争条件:我可以使用多个进程获取同一页面来一致地重现它,但如果我序列化请求,则永远不会重现它。

我正在使用velocity-1.5;我尝试迁移到 1.6-beta1 但看到其他错误。

已解决:请参阅下面的评论

于 2008-10-28T00:54:22.757 回答
0

由于源代码中的注释已经说明这不应该发生,我认为这是模板软件中的一个错误。向编写它的人提交错误报告。

于 2008-09-16T21:47:41.657 回答
0

您需要获取 RuntimeException 及其原因的完整堆栈跟踪。

请编辑您的答案以添加该信息。

于 2008-09-16T23:42:04.190 回答
0

我已经通过电子邮件向代码的作者发送了电子邮件,看看他们是否可以提供一些见解。我会确保分享我学到的任何东西。

于 2008-09-23T02:36:47.720 回答