За да не преоткривате колелото, ако използвате Apache Commons Lang, вижте ExceptionUtils.getRootCause().
Струва ли си да включите библиотека само за това? Може би не. Но ако вече го имате в пътя си към класа, той е там за вас и имайте предвид, че прави някои неща, които една „наивна“ реализация може да не направи (например справяне с цикли във веригата на причините... уф!)