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


编辑:根据 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.lang.exception:Template.merge() 失败。该文档为空,很可能是由于解析错误。at org.apache.velocity.Template.merge(Template.java:277) at com.opensymphony.webwork.dispatcher.VelocityResult.doExecute(VelocityResult.java:91) at com.opensymphony.webwork.dispatcher.WebWorkResultSupport.execute(WebWorkResultSupport 。在com.opensymphony.xwork.defaultActionInvocation.invoke(defaultActionInvocation.java:164)上截取(周围interceptor.java:35)in com.opensymphony.xwork.interceptor.interceptor.aroundceptor.aroundceptor.inroundceptor.intercept(com.java:35)at com.opensymphony at com.opensymphony at com.opensymphony at. 。 opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java: 35)在com.opensymphony.xwork.defaultActionInvocation.Invoke(defaultActionInvocation.java:164)上,com.opensymphony.xwork.Interpector.aroundecceor.aroundspector.aroundspector.interpoctor.intercept(internector.java:35) 。 servletdispatcher.service(servletdispatcher.java:237)在javax.servlet.http.http.httpservlet.service(httpservlet.java:802) .catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:39) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain 。 core.applicationfilterchain.internaldofilter(applicationfilterchain.java:202)at org.apache.catalina.core.core.applicationfilterchain.dofilter(applicationfilterterchain.java.java:173) ava:44)在org 。爪哇:30) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.apache.catalina.core. standardWrapPervalve.Invoke(standardWrappervalve.java:214)at org.apache.catalina.core.core.standardcontextvalve.invoke(standardContextvalve.java:178) 。 。 http11.http11processor.process(http11processor.java:825)at org.apache.coyote.http11.http11protocol $ httpp1 connectionler.http11connectionler.processConnection(httppppp111prototocol.java:7738) ProcessSocket(PooltCpendPoint。 java:526)at org.apache.tomcat.util.util.net.LeaderFollowerWorkerThread.runit(readefollowerworkerworkerworkerthread.java:80)on org.apache.tomcache.tomcate.tomcat.tomcat.util.threads.threads.threads.threadpool $ .lang.thread.run(未知来源)

有帮助吗?

解决方案

您使用的是哪个版本的 Velocity?旧版本中存在一些竞争条件导致了这种情况。大多数在 Velocity 1.5 版本中被压缩。不过我个人建议使用 Velocity 1.6-beta1。它极大地提高了性能(内存和速度),并修复了许多 1.5 版中未包含的小错误。

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

其他提示

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

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

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

解决:请参阅下面的评论

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

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

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

我已经给代码的作者发了电子邮件,看看他们是否可以提供一些见解。我一定会分享我学到的一切。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top