关于java:什么导致速度Template.merge()失败? 如何避免呢?

关于java:什么导致速度Template.merge()失败? 如何避免呢?

What causes a velocity Template.merge() failure? How does one avoid it?

我们的团队一直在遇到速度模板问题。 渲染后,有些人抛出RuntimeException并显示消息" Template.merge()失败-无法渲染Velocity模板'/template.vm'"。 我们无法重现该问题,并且网络上的文档还远远不够。 问题并非始终可再现-有时渲染会导致错误的相同模板也可以在其他时间成功显示。 Template类的源代码也几乎没有帮助。 先感谢您。

编辑:基于Nathan Bubna的回复,我需要澄清一下,我们使用的是Velocity 1.4版。

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

2008-09-15 11:07:57,336错误速度-Template.merge()失败。该文档为空,很可能是由于解析错误。
2008-09-15 11:07:57,336错误VelocityResult-无法呈现Velocity模板,'/ 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.AroundInterceptor.intercept(AroundInterceptor.java:35)
在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
在com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
在com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
在com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
在com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
在com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
在com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.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.internalDoFilter(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.internalDoFilter(ApplicationFilterChain.java:202)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
在org.nanocontainer.nanowar.webwork2.PicoObjectFactoryFilter.doFilter(PicoObjectFactoryFilter.java:46)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
在org.nanocontainer.nanowar.ServletRequestContainerFilter.doFilter(ServletRequestContainerFilter.java:44)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
在com.bostoncapital.stuyvesant.RememberUserNameFilter.doFilter(RememberUserNameFilter.java:30)
在org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
在org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:526)
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
在org.apache.catalina.connector.CoyoteAdapter.service(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(PoolTcpEndpoint.java:526)
在org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
在org.apache.tomcat.util.threads.ThreadPool $ ControlRunnable.run(ThreadPool.java:684)
在java.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及其原因的完整堆栈跟踪。

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


由于源中的注释已经说明了这种情况不应该发生,因此我认为这是Template软件中的错误。将错误报告提交给编写该报告的人。


推荐阅读

    显示linux时间命令?

    显示linux时间命令?,时间,系统,信息,一致,命令,文件,终端,目录,选项,参数,lin

    linux显示最多的命令?

    linux显示最多的命令?,系统,情况,信息,数据,工具,电脑,状态,时间,分析,命令,

    linux显示错误命令?

    linux显示错误命令?,信息,系统,电脑,状态,时间,环境,命令,搜狐,密码,异常,虚

    linux逐行显示命令?

    linux逐行显示命令?,标准,信息,系统,工作,地址,命令,实时,名称,文件,目录,Lin

    linux显示时间命令?

    linux显示时间命令?,时间,系统,管理,标准,信息,单位,工具,数据,中国,命令,lin

    linux启动显示命令行?

    linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,l

    linux启动显示命令行?

    linux启动显示命令行?,系统,密码,终端,状态,首页,情况,基础,电脑,信息,工具,l

    linux显示之前的命令?

    linux显示之前的命令?,系统,信息,命令,地址,服务,环境,数据,标准,数字,不了,l

    linux打开显示器命令?

    linux打开显示器命令?,信息,工具,系统,环境,发行,实时,数据,设备,命令,文件,L

    linux命令实时显示?

    linux命令实时显示?,系统,实时,时间,信息,情况,命令,对比,电脑,名称,一致,lin

    linux外部命令显示?

    linux外部命令显示?,系统,工具,命令,一致,盘中,软件,技术,外部,内部,文件夹,L

    linux命令显示ip?

    linux命令显示ip?,地址,系统,网络,信息,技术,电脑,手机,设备,服务,管理,配置L

    linux编译时显示命令?

    linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

    linux显示运行命令?

    linux显示运行命令?,系统,服务,状态,信息,工具,数据,电脑,标准,管理,时间,如

    显示linux网卡命令行?

    显示linux网卡命令行?,系统,信息,工具,网络,服务,电脑,网卡,技术指标,地址,

    linux命令显示内容?

    linux命令显示内容?,标准,系统,数据,命令,百度,实时,时间,信息,文件,内容,lin

    linux常用显示命令?

    linux常用显示命令?,工作,地址,系统,信息,管理,命令,目录,标准,功能,常用命

    linux用命令显示账号?

    linux用命令显示账号?,密码,系统,信息,地址,电脑,名字,用户,命令,用户名,用

    linux命令行同步显示?

    linux命令行同步显示?,地址,工具,系统,数据,工作,时间,命令,综合,网址,信息,L

    linux命令显示窗口?

    linux命令显示窗口?,系统,工具,首页,终端,密码,命令,窗口,界面,桌面,选项,lin