2011-07-21 65 views
3

我們有一個自定義的錯誤控制程序,在我們發生所有錯誤後會被調用。然而,即使原始錯誤不是空指針,我們大多數拋出的錯誤最終都會作爲空指針進入控制器。有任何想法嗎?下面的代碼。 Bootstrap和UrlMappings可根據需要提供。由於Grails錯誤處理程序總是收到空指針

錯誤處理方法

def HandleErrors = 
{ 

    def exception = request.exception.cause.class 

    if (exception) 
    { 
     Exception ex = request.exception //This exception is always a NPE 
      ... 

的分組碼拋出異常。我原本在這裏沒有嘗試捕獲,但想要添加它,以便我確信拋出的異常不是NPE。它的文件沒有發現異常。

try{ 
     def writer = new FileWriter(new File(fileSaveLocation)); 
    } 
    catch (ex) 
    { 
     throw(ex) 
    } 

編輯:添加是被推到了異常處理程序

Exception:org.codehaus.groovy.grails.web.errors.GrailsWrappedRuntimeException 
Cause:org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException 

回答

1

這不是因爲你引用的東西是錯誤處理程序內空的,所以都在不經意間拋出另一個異常外,哪個又被抓到了?

可以嘗試更改:

def exception = request.exception.cause.class 

def exception = request?.exception?.cause?.class 
+0

我所做的變化和異常仍設置爲org.springframework.web.util.NestedServletException而不是零,所以它似乎不會無意中拋出/捕捉第二個異常。 – Joseph

+0

在'HandleErrors'方法的頂部放置'grails.util.GrailsUtil.sanitize(request.exception))。printStackTrace()'是否將NPE的原因位置打印到控制檯? –

+0

實際上,問題原來是BootStrap文件是如何設置的。我仍然不是100%,爲什麼它導致一個問題,因爲它看起來設置得很好,但從bootstrap中移除exceptionMappings解決了這個問題。如果我們將來需要有多個錯誤控制器,那麼我們將重新討論這個問題。儘管感謝您的幫助! – Joseph