The current implementation of the ResponseCorrelator deals with exception responses by calling the transport exception listener as well as throwing an exception from the request methods instead of just returning the ExceptionResponse message and allowing the caller to deal with the error. This prevents the caller from being able to recover from non-critical messages as the ExceptionListener calls marks the transport as failed in the Connection when it needn't be. The correct operation should be for the ExceptionResponse to be propagated to the caller (Connection) and allow that to deal with the error.
This is needed so that cases like TransactionRollbackException's returned from Commit requests when a failover occurs and the State Tracker rolls back the transaction because its state is in doubt. This is not a critical error and the Connection should be allowed to continue after this. Other cases similar to this also exist.