class ZMSImpl implements Authorizer, KeyStore, ZMSHandler {

    @Override
    public DomainRoleMember getPrincipalRoles(ResourceContext context, String principal, String domainName) {
        final String caller = context.getApiName();
        logPrincipal(context);

        if (StringUtil.isEmpty(principal)) {
            // If principal not specified, get roles for current user
            principal = ((RsrcCtxWrapper) context).principal().getFullName();
        }
        validateRequest(context.request(), caller);
        validate(principal, TYPE_ENTITY_NAME, caller);

        // for consistent handling of all requests, we're going to convert
        // all incoming object values into lower case (e.g. domain, role,
        // policy, service, etc name)

        principal = principal.toLowerCase();

        if (!StringUtil.isEmpty(domainName)) {
            validate(domainName, TYPE_DOMAIN_NAME, caller);
            domainName = domainName.toLowerCase();
            setRequestDomain(context, domainName);
        }

        return dbService.getPrincipalRoles(principal, domainName);
    }

    public  ZMSImpl();

}