When handling an exception, we should always preserve the entire exception - except if we know for sure that the outermost exception is only used to wrap a checked exception.
Even then it can be bad practice to call getRootCause(). That will often discard too much context.
For example, the WorkflowDriver catches exceptions from executing workflow nodes:
Here, getRootCause() discards the outer stack trace, and we won't know where in the code (what action, what type of action, user code or system code) it was thrown. Instead we should always rethrow the original exception. If unwrapping is necessary it can be done at the top most level where the exception is handled or logged.