Velocity Template.merge() の失敗の原因は何ですか?どうすればそれを回避できるでしょうか?

StackOverflow https://stackoverflow.com/questions/74818

  •  09-06-2019
  •  | 
  •  

質問

私たちのチームでは、ベロシティ テンプレートに関する問題が繰り返し発生しています。レンダリング時に、「Template.merge() の失敗 - Velocity テンプレート、'/template.vm' をレンダリングできません」というメッセージを含む RuntimeException がスローされる場合があります。問題を再現できず、Web 上のドキュメントもかなり不十分です。この問題は常に再現可能ではありません。同じテンプレートのレンダリングでエラーが発生する場合もあれば、問題なく表示される場合もあります。テンプレートクラス ソースコード もあまり役に立ちません。よろしくお願いします。


編集:Nathan Bubna の回答に基づいて、Velocity バージョン 1.4 を使用していることを明確にする必要があります。


編集:スタック トレースが有益であることが指摘されているので、ここに示します。

2008-09-15 11:07:57,336 エラー速度 - Template.merge() の失敗。ドキュメントは null です。おそらく解析エラーが原因です。2008-09-15 11:07:57,336エラーvelocityResult-速度テンプレートをレンダリングできません '/search/[template- redacted]。Template.merge() の失敗。ドキュメントは null です。おそらく解析エラーが原因です。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 .java:109)at com.opensymphony.xwork.defaultactionInvocation.executeresult(defaultactionInvocation.java:258)at com.opensymphony.xwork.defaultactioninvocation.invoke(defaultactioninvocation.java:182)at com.opensymphony.xphork.xwork. intercept(AroundInterceptor.java:35) at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164) at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35) at com.opensymphony.xwork .DefaultactionInvocation.Invoke(defaultactionInvocation.java:164)at com.opensymphony.interceptor.ArundInterceptor.intercept(roundInterceptor.java:35)at com.openshphony.xwork.defaultactionInvocation.invoke(defaultaction invocation.java:164)at com。 opensymphony.xwork.interceptor.aroundinterceptor.intercept(anuferinterceptor.java:35)at com.opensymphony.xwork.defaultactioninvocation.invoke(defaultactioninvocation.java:164)at com.opensymphony.xwork.interceptor.Interceptor.Interceptor.Interceptor.Interceptor.Interceptor.Interceptor.Interceptor.Interceptor.Interceptor.Interceptor.Interceptor. 35)com.opensymphony.xwork.defaultactioninvocation.invoke(defaultactioninvocation.java:164)at com.opensymphony.xwork.interceptor.interceptor.intercept(anuftion interceptor.java:35)at com.opensymphony.xwork.defaultaction invoce.defaultaction invoke.defaultactionは.java:164)com.opensymphony.xwork.defaultactionproxy.execute(defaultactionproxy.java:116)at com.opensymphony.webwork.dispatcher.servletdispatcher.ServiceAction(servletdispatcher.java:272) servletdispatcher.service(servletdispatcher.java:237)at javax.servlet.http.httpservlet.service(httpservlet.java:802)at org.apache.catalina.core.core.plicationfilterchain.internaldofilter(Applicationfilterchain) .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 .java:202)at org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:173)at org.nanocontainer.nanowar.webwork2.picoo objectfactoryfilter.dofilter(picoobjectoryfiltoryfiltoryfiltoryfulter.java:46)。 core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173) at org.nanocontainer.nanowar.ServletRequestContainerFilter.doFilter(ServletRequestContainerFilter.java:44) at org .apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:202)at org.apache.catalina.core.applicationfilterchain.dofilter(applicationfilterchain.java:173) Java :30)atorg.apache.catalina.core.applicationfilterchain.internaldofilter(applicationfilterchain.java:202)at org.apache.catalina.core.pilterchain.dofilter.dofilter(applicationfilterchain.java:173) StandardWrappervalve.Invoke(StandardWrappervalve.java:214)atorg.apache.catalina.core.standardcontextvalve.invoke(StandardContextValve.java:178)at org.apache.catalina.authenticator.autherbase.invase.invase.Invase .apache.catalina.valves.accesslogvalve.invoke(accesslogvalve.java:526)at org.apache.catalina.core.standhostvalve.invoke(StandardHostvalve.java:126)at org.apache.catalina.val.erreportvalveke(Errorreportvalveek(ErrerportValvee) .java:105)at org.apache.catalina.core.standenginevalve.invoke(StandardEngineValve.java:107)at org.apache.catalina.connector.coyoteadapter.service(coyoteadapter.java:148)at org.apache.coyote。 http11.http11processor.process(http11processor.java:825)at org.apache.coyote.http11.http11protocol $ http11connectionhandler.processconnection(http11protocol.java:738)at apcach.p.pide.tmpake.tmpake.tmpake.tp1rot。 ProcessSocket(pooltcpendpoint。 Java:526)at org.apache.tomcat.util.net.leaderfollowerworkerthread.runit(leaderfollowerworkerthread.java:80)at org.apache.tomcat.util.threads.threadpool $ controlrunnable.run .lang.thread.run(不明なソース)

役に立ちましたか?

解決

Velocity のどのバージョンを使用していますか?古いバージョンには、この問題を引き起こすいくつかの競合状態がありました。ほとんどは Velocity 1.5 リリースで潰されました。ただし、個人的には Velocity 1.6-beta1 を使用することをお勧めします。パフォーマンス (メモリと速度) が大幅に向上し、1.5 には含まれなかった多くの小さなバグが修正されました。

編集:1.4 を使用しているとのことなので、はい、これは私たちが修正した競合状態であると確信しています。アップグレードをご検討ください。1.6 にはバグが修正され、パフォーマンスが向上しているため、間違いなく 1.6 が最善の策です。1.6 ファイナルはもうすぐリリースされるはずです。

他のヒント

現在、私たちのウェブサイトで同じバグに取り組んでいます。

競合状態のようです。同じページをフェッチする複数のプロセスを使用して一貫して再現できますが、リクエストをシリアル化すると再現できなくなります。

私はvelocity-1.5を使用しています。1.6-beta1 に移行しようとしましたが、他のエラーが発生しました。

解決済み:以下のコメントを参照してください

ソースのコメントには、これは起こらないはずであるとすでに記載されているため、テンプレート ソフトウェアのバグだと思います。バグレポートを書いた人に送信してください。

RuntimeException とその原因の完全なスタック トレースを取得する必要があります。

回答を編集してその情報を追加してください。

コードの作成者に電子メールを送り、洞察を提供できるかどうかを確認しました。私が学んだことはすべて必ず共有します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top