code: public void afterThrowing(Throwable original) throws Throwable {
  
          Class<?> candidateType = original.getClass();
          Throwable candidate = original;
  
          if (ClassUtils.isAssignable(MessageException.class, candidateType)) {
              MessageException me = (MessageException) candidate;
              if (SERVER_PROCESSING_CODE.equals(me.getCode()) && me.getRootCause() != null) {
                  candidateType = me.getRootCause().getClass();
                  candidate = me.getRootCause();
              }
          }
  
          for (ExceptionTranslator translator : this.exceptionTranslators) {
              if (translator.handles(candidateType)) {
                  MessageException result = translator.translate(candidate);
                  if (result != null) {
                  	exceptionLogger.log(result);
                      throw result;
                  }
              }
          }
          exceptionLogger.log(original);
          throw original;
      }
docs: Apply translation to the thrown exception.
  
  @param original the thrown exception
  @throws Throwable the translated exception