Adicionar mensagem personalizada à exceção gerada enquanto mantém o rastreamento de pilha em Java

Eu tenho um pequeno pedaço de código que executa algumas transações para processamento. Cada transação é marcada com um número de transação, que é gerado por um programa externo e não é necessariamente sequenciado. Quando eu pego uma exceção no código de processamento, estou lançando-a para a classe principal e registrando-a para revisão posterior. Gostaria de adicionar o número da transação a essa exceção lançada. É possível fazer isso enquanto ainda mantém o rastreamento de pilha correto?

Por exemplo:

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