'Initilize XCLI connection.
returns an XCLIClient object'

@proxy._trace_time
def _init_xcli(self, backend_id=strings.PRIMARY_BACKEND_ID):

    try:
        (address, user, password) = self._get_connection_params(backend_id)
    except Exception as e:
        details = self._get_code_and_status_or_message(e)
        ex_details = (SETUP_BASE_ERROR, {'title': strings.TITLE, 'details': details})
        LOG.error(ex_details)
        raise self.meta['exception'].InvalidParameterValue((_('%(prefix)s    %(ex_details)s') % {'prefix': storage.XIV_LOG_PREFIX, 'ex_details': ex_details}))
    self._verify_xiv_flags(address, user, password)
    try:
        clear_pass = cryptish.decrypt(password)
    except TypeError:
        ex_details = (SETUP_BASE_ERROR, {'title': strings.TITLE, 'details': 'Invalid    password.'})
        LOG.error(ex_details)
        raise self.meta['exception'].InvalidParameterValue((_('%(prefix)s    %(ex_details)s') % {'prefix': storage.XIV_LOG_PREFIX, 'ex_details': ex_details}))
    certs = certificate.CertificateCollector()
    path = certs.collect_certificate()
    try:
        LOG.debug('connect_multiendpoint_ssl    with:    %s', address)
        xcli = client.XCLIClient.connect_multiendpoint_ssl(user, clear_pass, address, ca_certs=path)
    except errors.CredentialsError:
        LOG.error(SETUP_BASE_ERROR, {'title': strings.TITLE, 'details': 'Invalid    credentials.'})
        raise self.meta['exception'].NotAuthorized()
    except (errors.ConnectionError, transports.ClosedTransportError):
        err_msg = (SETUP_INVALID_ADDRESS, {'address': address})
        LOG.error(err_msg)
        raise self.meta['exception'].HostNotFound(host=err_msg)
    except Exception as er:
        err_msg = (SETUP_BASE_ERROR % {'title': strings.TITLE, 'details': er})
        LOG.error(err_msg)
        raise self._get_exception()(err_msg)
    finally:
        certs.free_certificate()
    return xcli
