Я не впевнений, що зробив би це (хоча, враховуючи JavaDoc, я не міг сказати, чому я вагаюся), але є список прихованих винятків Throwable, до яких ви можете додати addSuppressed. Здається, JavaDoc не каже, що це лише для JVM, який використовується у спробу використання ресурсів:
Додає вказаний виняток до винятків, які були придушені для доставки цього винятку. Цей метод є безпечним для потоків і, як правило, викликається (автоматично і неявно) оператором "спробувати ресурси".
Поведінка придушення вмикається, якщо відключено через конструктор. Коли придушення вимкнено, цей метод не робить нічого іншого, крім перевірки свого аргументу.
Зауважте, що коли один виняток спричиняє інший виняток, перший виняток зазвичай виловлюється, а потім другий виняток кидається у відповідь. Іншими словами, між двома винятками існує причинний зв'язок. На відміну від цього, бувають ситуації, коли два блоки винятків можуть бути кинуті в блоки кодових братів, зокрема, у блок спробу оператора «спробу-ресурсів» та згенерований компілятором нарешті блок, який закриває ресурс. У цих ситуаціях можна поширювати лише один із закинутих винятків. У операторі спробу використання ресурсів, коли є два такі винятки, поширюється виняток, що походить з блоку спробу, і виняток з остаточно блоку додається до списку винятків, придушених виключенням з блоку спробу. Як виняток розгортає стек,
Виняток, можливо, придушив винятки, а також був викликаний іншим винятком. Наявність причини винятку чи ні, семантично відомо під час її створення, на відміну від того, чи буде виняток придушувати інші винятки, які, як правило, визначаються лише після викиду виключення.
Зауважте, що письмовий код програміста також може скористатися викликом цього методу в ситуаціях, коли є декілька винятків побратимів, і лише один може бути розповсюджений.
Зауважте, останній абзац, який, здається, відповідає вашому випадку.
AggregateExceptionопис, який містить список винятків. Ця ідея повинна бути застосовна і для Java.