@Override
    public String canonicalize(String nameComponent) {
        try {

            // As Keeper notation is essentially a URL, encode all components
            // using standard URL escaping
            return URLEncoder.encode(nameComponent, "UTF-8");

        }
        catch (UnsupportedEncodingException e) {
            throw new UnsupportedOperationException("Unexpected lack of UTF-8 support.", e);
        }
    }
Create and return a KSM client for the provided KSM config if not already
present in the client map, otherwise return the existing client entry.

@param ksmConfig
    The base-64 encoded JSON KSM config blob associated with the client entry.
    If an associated entry does not already exist, it will be created using
    this configuration.

@return
    A KSM client for the provided KSM config if not already present in the
    client map, otherwise the existing client entry.

@throws GuacamoleException
    If an error occurs while creating the KSM client.
extensions/guacamole-vault/modules/guacamole-vault-ksm/src/main/java/org/apache/guacamole/vault/ksm/secret/KsmSecretService.java