2013-04-03 4 views
2

У меня есть интересный сценарий, в котором я устанавливаю ошибку HttpServletResponse в предложении catch. «Response.sendError (..)» также генерирует исключение. Каков наилучший способ справиться с исключениями при обработке исключений для сохранения исходной детали исключения?Множественный корень Java вызывает исключение

У меня есть что-то вроде этого:

try { 
... 
} catch(Exception e) { 
    try { 
     response.sendError(500); 
    } catch(IOException e2) { 
     //Can I do something like: 
     //'throw new ServletException(e,e2)' here? 
    } 
} 

Другими словами, что это лучший способ укутаться информацию из обоих исключений в следующем за исключением брошенную? Я не хочу потерять информацию из первого исключения при обработке второго.

В целом, несколько блоков catch catch кажутся ужасными для удобочитаемости. В идеале хотелось бы избежать этого беспорядка. Может всегда связывать встроенный try/catch в методе ... все равно кажется плохим, хотя и не позволяет сохранить все детали исключения.

ответ

6

Try:

try { 
... 
} catch(Exception e) { 
    try { 
     response.sendError(500); 
    } catch(IOException e2) { 
     e2.initCause(e); 
     throw e2; 
    } 
} 
+0

Спасибо - не понял, что это было возможно ... Я думаю, вы не повезло, если вы имеете дело с исключением того, что уже есть первопричину. Однако должно быть хорошо для этого случая. –

+1

Я думаю, вы можете создать больше исключений и соединить их. – ccleve

+0

Как вы справитесь, если причина уже установлена ​​на 'e2'? Это немного сложно. В вашем примере кода 'e2.initCause (e);' будет генерировать исключение, если причина уже установлена ​​на 'e2'. – kevinarpe

Смежные вопросы