2012-09-13 60 views
2

當我嘗試在控制器方法中捕獲異常時,我無法捕獲到SocketException。控制器的動作看起來像:Grails控制器 - 無法捕獲SocketException

def updateDeviceStartV1() { 
     try { 
     ... 
     response.status = 200; 
     response.setContentType("application/octet-stream") 
     response.outputStream << responseService.encryptedResponse // byte[] 
     } 
     catch(Exception e) { 
     log.error "Server faced unexpected exception", e 
     response.status = 500; 
     ... 
     } 

的SocketException是以線「response.outputStream < < responseService.encryptedResponse」拋出,因爲客戶端意外關閉連接。儘管如此,這個例外是沒有捕捉到和控制檯收到標準例外顯示...

我做錯了什麼?

回答

4

我認爲如果引發異常的方法不會顯式拋出異常(帶有簽名中的拋出),它將作爲UndeclaredThrowableException拋出異常。然後,您的catch中的類型與它不匹配。嘗試捕獲SocketException。或者如果你可以使用catch(all)來捕捉它們。 哦,看看this

+0

但是,您的回答給了我更深入的Groovy異常魔法的理解:-)謝謝 – kuceram

+0

我很高興=)。但是'catch(all)'絕對應該捕捉到來自更深層的任何異常。如果在catch塊中打印異常的類會發生什麼? –

+0

這是工作,我看上去很糟糕。對不起:-) – kuceram