title: Camel exception/error handling transacted route without causing client exception
body: <p>I am working with a command-event driven system using JMS and Apache Camel for for routing. In the following situation:</p>
  
  <ul>
  <li><p>I send the system a request-reply command "X".</p></li>
  <li><p>The system receives "X" via a transacted camel route.</p></li>
  <li><p>While processing "X" the system sends out several events, "Y" &amp; "Z",
  but as its part of the transacted route these should not be flushed
  until the transaction has completed.</p></li>
  <li><p>An runtime exception occurs - which should cause the transaction to
  rollback.</p></li>
  </ul>
  
  <p>I want to be able to intercept the exception and reply with a genuine message (rather than exception) to the client. As such I started to implement an error handler:</p>
  
  <pre><code>    onException(RuntimeException.class)
          .handled(true)
          .markRollbackOnly()
          .filter(header(Header.REPLY_TO.getName()).isNotNull())
          .to(DESTINATION_FOR_EXCEPTION_HANDLING)
          .to(DESTINATION_FOR_REPLIES);
  </code></pre>
  
  <p>Where:</p>
  
  <ul>
  <li>DESTINATION_FOR_EXCEPTION_HANDLING is a bean that takes the exception and returns a message object</li>
  <li>DESTINATION_FOR_REPLIES is a bean that sets the out body to the message object</li>
  </ul>
  
  <p>The problem I have is that if I include "markRollbackOnly()" it:</p>
  
  <ul>
  <li>Prevents "Y" &amp; "Z" from being flushed - GOOD</li>
  <li>Causes an exchange exception on the client making the requestReply - BAD</li>
  </ul>
  
  <p>And If i don't include it, then:</p>
  
  <ul>
  <li>"Y" &amp; "Z" get flushed - BAD</li>
  <li>I receive the genuine message object on the client - GOOD</li>
  </ul>
  
  <p>How can I configure camel to both prevent the flushing of messages in the transaction, and yet be able to convert the exception to a handled error message?</p>