title: Add custom message to thrown exception while maintaining stack trace in Java
body: <p>I have a small piece of code that runs through some transactions for processing. Each transaction is marked with a transaction number, which is generated by an outside program and is not necessarily sequenced. When I catch an Exception in the processing code I am throwing it up to the main class and logging it for review later. I'd like to add the transaction number to this thrown Exception. Is it possible to do this while still maintaining the correct stack trace?</p>
  
  <p>For Example:</p>
  
  <pre><code>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;
          }
      }
  }
  </code></pre>