Dodaj niestandardowy komunikat do zgłoszonego wyjątku, zachowując śledzenie stosu w Javie

Mam niewielki fragment kodu, który uruchamia niektóre transakcje w celu przetworzenia. Każda transakcja jest oznaczona numerem transakcji, który jest generowany przez zewnętrzny program i niekoniecznie jest sekwencjonowany. Kiedy łapię wyjątek w kodzie przetwarzania, wrzucam go do klasy głównej i loguję go do przeglądu później. Chciałbym dodać numer transakcji do tego zgłoszonego wyjątku. Czy można to zrobić, zachowując prawidłowy ślad stosu?

Na przykład:

public static void main(String[] args) {
    try{
        processMessage();
    }catch(Exception E){
        E.printStackTrace();
    }

}

private static void processMessage() throws Exception{
    String transNbr = "";
    try{
        transNbr = "2345";
        throw new Exception();
    }catch(Exception E){
        if(!transNbr.equals("")){
            //stack trace originates from here, not from actual exception
            throw new Exception("transction: " + transNbr); 
        }else{
            //stack trace gets passed correctly but no custom message available
            throw E;
        }
    }
}

questionAnswers(6)

yourAnswerToTheQuestion