private void invokeNextFaultHandler(MessageContext synCtx) {

    Stack faultStack = synCtx.getFaultStack();
    if (!faultStack.isEmpty()) {
      Object faultHandler = faultStack.pop();
      if (faultHandler instanceof Endpoint) {
        // This is the parent . need to inform parent with fault child
        ((Endpoint) faultHandler).onChildEndpointFail(this, synCtx);
      } else if (faultHandler instanceof MediatorFaultHandler) {
        if (!executeLastSequenceFaultHandler(synCtx)) {
          ((FaultHandler) faultHandler).handleFault(synCtx);
        }
      } else {
        ((FaultHandler) faultHandler).handleFault(synCtx);
      }
    } else {
      executeLastSequenceFaultHandler(synCtx);
    }
  }