code: public static List<Throwable> getCausalChain(final Throwable throwable) {
  		if (throwable == null) {
  			throw new NullPointerException("Throwable is null");
  		}
  		
  		List<Throwable> causes = new ArrayList<Throwable>();
  		causes.add(throwable);
  		
  		Throwable cause = throwable.getCause();
  		
  		while ((cause != null) && (!causes.contains(cause))) {
  			causes.add(cause);
  			cause = cause.getCause();
  		}
  		
  		return causes;
  	}
docs: Returns the Throwable's cause chain as a list. The first entry is the Throwable followed by the cause chain.
  @param throwable The Throwable
  @return The Throwable and its cause chain