代码之家  ›  专栏  ›  技术社区  ›  Lyudmil

导致velocity Template.merge()失败的原因是什么?如何避免它?

  •  2
  • Lyudmil  · 技术社区  · 18 年前

    我们的团队在速度模板方面遇到了一个反复出现的问题。渲染时,有些会抛出RuntimeException,并显示消息“Template.merge()失败-无法渲染Velocity模板,'/Template.vm'”。我们无法重现这个问题,网络上的文档也相当不足。这个问题并不总是可重复的——有时渲染会导致错误的相同模板在其他时候也能顺利显示。Template类 source code 也没什么帮助。提前感谢。


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


    编辑:既然有人指出堆栈跟踪是有益的,那么这里是:

    2008-09-15 11:07:57336错误速度-Template.merge()失败。文档为空,很可能是由于解析错误。 2008-09-15 11:07:57336错误速度结果-无法渲染速度模板,'search/[模板已编辑].vm' java.lang.Exception:Template.merge()失败。文档为空,很可能是由于解析错误。 以原始速度。Template.merge(Template.java:277) 请访问com.opensymphony.webwork.dispatcher。VelocityResult.doExecute(VelocityResults.java:91) 请访问com.opensymphony.webwork.dispatcher。WebWorkResultSupport.execute(WebWorkResultSupport.java:109) 在com.opensymphony.xwork.DefaultActionInvoice.executeResult(DefaultActionInvocation.java:258) 在com.opensymphony.xwork.DefaultActionInvocation.require(DefaultActionInvocating.java:182) 在com.opensymphony.xwork.interceptor上。AroundInterceptor.intercept(AroundInterventor.java:35) 在com.opensymphony.xwork.DefaultActionInvocation.require(DefaultActionInvocating.java:164) 在com.opensymphony.xwork.interceptor上。AroundInterceptor.intercept(AroundInterventor.java:35) 在com.opensymphony.xwork.DefaultActionInvocation.require(DefaultActionInvocating.java:164) 在com.opensymphony.xwork.interceptor上。AroundInterceptor.intercept(AroundInterventor.java:35) 在com.opensymphony.xwork.DefaultActionInvocation.require(DefaultActionInvocating.java:164) 在com.opensymphony.xwork.interceptor上。AroundInterceptor.intercept(AroundInterventor.java:35) 在com.opensymphony.xwork.DefaultActionInvocation.require(DefaultActionInvocating.java:164) 在com.opensymphony.xwork.interceptor上。AroundInterceptor.intercept(AroundInterventor.java:35) 在com.opensymphony.xwork.DefaultActionInvocation.require(DefaultActionInvocating.java:164) 在com.opensymphony.xwork.interceptor上。AroundInterceptor.intercept(AroundInterventor.java:35) 在com.opensymphony.xwork.DefaultActionInvocation.require(DefaultActionInvocating.java:164) 在com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116) 请访问com.opensymphony.webwork.dispatcher。ServletDispatcher.serviceAction(ServletDispatcher.java:272) 请访问com.opensymphony.webwork.dispatcher。ServletDispatcher.service(ServletDispatcher.java:237) 请访问javax.servlet.http。HttpServlet.service(HttpServlet.java:802) 在org.apache.catalina.core上。ApplicationFilterChain.internal DoFilter(ApplicationFilterChain.java:252) 在org.apache.catalina.core上。ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 在com.opensymphony.module.sitemesh.filter上。PageFilter.doFilter(PageFilter.java:39) 在org.apache.catalina.core上。ApplicationFilterChain.internal DoFilter(ApplicationFilterChaim.java:202) 在org.apache.catalina.core上。ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.nanocontainer.nanowar.webwork2.PicoObjectFactoryFilter.doFilter(PicoObjectFactory.java:46) 在org.apache.catalina.core上。ApplicationFilterChain.internal DoFilter(ApplicationFilterChaim.java:202) 在org.apache.catalina.core上。ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 在组织.nanocontainer.nanowar。ServletRequestContainerFilter.doFilter(ServletRequestContainerFilter.java:44) 在org.apache.catalina.core上。ApplicationFilterChain.internal DoFilter(ApplicationFilterChaim.java:202) 在org.apache.catalina.core上。ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 在波士顿资本公司。RememberUserNameFilter.doFilter(RememberUserNameFilter.java:30) 在org.apache.catalina.core上。ApplicationFilterChain.internal DoFilter(ApplicationFilterChaim.java:202) 在org.apache.catalina.core上。ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) 在org.apache.catalina.core上。StandardWrapperValve.java:214 在org.apache.catalina.core上。StandardContextValve.java:178 登录org.apache.catalina.authenticator。AuthenticatorBase.recall(AuthenticatorBase.java:482) 在org.apache.catalina.valves。AccessLogValve.require(AccessLogValve.java:526) 在org.apache.catalina.core上。StandardHostValve.java:126 在org.apache.catalina.valves。ErrorReportalve.invoke(ErrorReportalve.gava:105) 在org.apache.catalina.core上。StandardEngineValve.java:107 在org.apache.catalina.connector上。CoyoteAdapter服务(CoyoteAdapter.java:148) 网址:org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:825) 网址:org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738) 在org.apache.tomcat.util.net上。PoolTcpEndpoint.processSocket(PoolTcpEendpoint.java:526) 在org.apache.tomcat.util.net上。LeaderFollowerWorkerThread.runIt(LeaderFollower WorkerThread.java:80) 请访问org.apache.tomcat.util.treads。ThreadPool$ControlRunnable.run(ThreadPool.java:684) 在java.lang.Thread.run(未知来源)

    5 回复  |  直到 17 年前
        1
  •  3
  •   Nathan Bubna    17 年前

    您使用的是哪个版本的Velocity?旧版本中的一些种族条件导致了这一点。大多数在Velocity 1.5版本中被压扁。虽然我个人建议使用Velocity 1.6-beta1。它大大提高了性能(内存和速度),并修复了许多小错误,这些错误并没有使其升级到1.5。

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

        2
  •  1
  •   user26294    17 年前

    我现在正在我们的网站上处理同一个bug。

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

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

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

        3
  •  0
  •   Jorn    18 年前

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

        4
  •  0
  •   tgdavies    18 年前

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

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

        5
  •  0
  •   Lyudmil    18 年前

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