throw ServiceException.FAILURE("unable to create alias", e);
throw ServiceException.FAILURE("unable to create alias: "+e.getMessage(), e);
    private void addAliasInternal(NamedEntry entry, String alias) throws ServiceException {    	assert(entry instanceof Account || entry instanceof DistributionList);        alias = alias.toLowerCase().trim();        int loc = alias.indexOf("@");         if (loc == -1)            throw ServiceException.INVALID_REQUEST("alias must include the domain", null);                String aliasDomain = alias.substring(loc+1);        String aliasName = alias.substring(0, loc);                DirContext ctxt = null;        try {            ctxt = LdapUtil.getDirContext(true);            Domain domain = getDomainByName(aliasDomain, ctxt);            if (domain == null)                throw AccountServiceException.NO_SUCH_DOMAIN(aliasDomain);                        String aliasDn = LdapProvisioning.emailToDN(aliasName, aliasDomain);            // the create and addAttr ideally would be in the same transaction            LdapUtil.simpleCreate(ctxt, aliasDn, "zimbraAlias",                    new String[] { Provisioning.A_uid, aliasName,                     Provisioning.A_zimbraId, LdapUtil.generateUUID(),                    Provisioning.A_zimbraAliasTargetId, entry.getId()} );            HashMap<String, String[]> attrs = new HashMap<String, String[]>();            attrs.put(Provisioning.A_zimbraMailAlias, addMultiValue(entry, Provisioning.A_zimbraMailAlias, alias));            attrs.put(Provisioning.A_mail, addMultiValue(entry, Provisioning.A_mail, alias));            // UGH            ((LdapNamedEntry) entry).modifyAttrsInternal(ctxt, attrs);        } catch (NameAlreadyBoundException nabe) {            throw AccountServiceException.ACCOUNT_EXISTS(alias);        } catch (InvalidNameException e) {            throw ServiceException.INVALID_REQUEST("invalid alias name", e);        } catch (NamingException e) {            throw ServiceException.FAILURE("unable to create alias", e);        } finally {            LdapUtil.closeContext(ctxt);        }                    }