Вы можете установить внутреннее исключение (AKA причина) двумя способами. Если вы создаете экземпляр исключения самостоятельно, передайте внутреннее исключение в конструктор (внешнего) исключения, например,
try {
// some code that throws innerException
} catch (Exception innerException) {
throw new OuterException(innerException);
}
С другой стороны, если внешнее исключение не имеет конструктора, который позволяет вам устанавливать внутреннее исключение, или вы сами не создаете экземпляр внешнего исключения, вы можете установить его с помощью
outerException.initCause(innerException);