För att inte uppfinna hjulet igen, om du använder Apache Commons Lang, titta på ExceptionUtils.getRootCause().
Är det värt att inkludera ett bibliotek bara för det? Kanske inte. Men om du redan har det på din klassväg, är det där för dig, och observera att det gör vissa saker som en "naiv" implementering kanske inte gör (t.ex. hantera cykler i orsakskedjan... usch!)