2017-10-05 92 views
2

有:如何失敗Velocity模板處理與tracable消息

  • Velocity模板或宏
  • 一些對象

如何驗證對象(#如果)和失效(停止進一步處理)的方式很容易被拖到失敗的地方(比如在Java中拋出異常)。

我期待這樣的事情:

#if (! $context.treasureMap.containsKey('gold')) 
    #fail('no golden treasure here') 
#end 

背景

我寫一個Maven站點頁面。速度上下文由maven注入幷包含POM信息。我想測試一些來自有效的pom的信息的存在。當信息不可用時,我想失敗。

要求

  • 失敗速度處理>失敗現場發電>失敗行家構建。
  • 錯誤消息應導致故障的地方,以便在網站應固定
  • 優選不配置(沒有擴展,只是構造包含在普通速度/工具)

試過

  • 嚴格參考模式
    不需要的配置,不想每次都失敗。
  • #evaluate('#end')又名語法錯誤
    (選擇#end作爲最具描述性的我的意圖)基本上我想要的。失敗處理和Maven構建,但錯誤消息不會導致失敗位置: ParseException: Encountered "#end" at line 1, column 1.
+0

要至少顯示Maven構建錯誤行/列我發現,從速度異常信息doxia現場渲染器神器不被使用。我報告了一個問題[DOXIASITETOOLS-179](https://issues.apache.org/jira/browse/DOXIASITETOOLS-179) – Mrkvozrout

回答

0

你需要做哪些產生exception.See explanation方法調用:

,其中一個可能會遇到速度內麻煩唯一的地方是,如果有哪個拋出異常的方法的調用在運行期間。例如,該VTL定義字符串$ foo的,然後試圖調用其子()方法會拋出IndexOutOfBoundsException異常:

#set ($foo = "bar") 

    #set ($bar = $foo.substring(0,10)) 

當異常被拋出,解析器將停止處理並將該異常拋出堆棧樹,並將其捕獲到導致解析器執行的方法中。此時,可以正常處理異常。

+0

是的,我正在尋找類似這樣的東西,但是錯誤信息並不是那麼有用「解析器爲testpage.vm「 – Mrkvozrout

+0

但是你有行失敗和描述。對於用戶定義的異常,請參閱https://stackoverflow.com/questions/15659200/how-to-throw-an-user-defined-exception-from-velocity-template-script-vtl – user7294900

+0

我無法在任何地方看到行或列 - 生成頁面是空白的,maven只顯示我引用的信息。 – Mrkvozrout