new ImportFailure("Import failed") is all that reaches the diagnostic log once the import tool catches a low-level failure and replaces it. The caller has no business seeing local file details. The person investigating the failure still needs to know what actually went wrong.
Keep the domain exception, and in its constructor pass the original failure to Throwable as the cause. Java gives you that causal link without turning the public exception category into the lower-level one.
The public response then uses the domain category and a message someone chose on purpose. It should never borrow its wording from getCause().getMessage(), because the cause may hold exactly the local details we meant to keep out. Internal diagnostics need deliberate handling as well. "Print every exception value" is not a policy.
Richer diagnostics come with access and redaction rules, and that burden is real. Dropping the cause avoids it and leaves you investigating from two words. I'd take the redaction work.