模块  java.naming
软件包  javax.naming.ldap

Class LdapName

  • 实现的所有接口
    SerializableCloneableComparable<Object>Name

    public class LdapName
    extends Object
    implements Name
    此类表示由RFC 2253指定的可分辨名称。 可分辨名称或DN由称为相对可分辨名称 s或RDN的有序组件列表组成。 RFC 2253中描述了DN语法的详细信息。

    该类解决了RFC 2253中的一些含糊之处,如下所示:

    • RFC 2253未定义术语“空白”。 ASCII空格字符0x20(“”)用于它的位置。
    • ',',';','='和'+'两侧允许有空格。 这样的空格被接受但不是由此代码生成的,并且在比较名称时被忽略。
    • 包含'='或非前导'#'字符(未转义)的AttributeValue字符串被接受。

    传递给LdapNameLdapName返回的字符串名称使用完整的Unicode字符集。 它们还可能包含编码为UTF-8的字符,每个八位字节由三个字符的子字符串表示,例如“\\ B4”。 但是,它们可能不包含编码为UTF-8的字符,每个八位字节由字符串中的单个字符表示:含义不明确。

    LdapName将正确解析所有有效名称,但在解析无效名称时不会尝试检测所有可能的违规。 接受无效名称是“慷慨的”。 名称的“有效性”最终在提供给LDAP服务器时确定,该服务器可以基于诸如其架构信息和互操作性考虑因素之类的因素接受或拒绝该名称。

    测试名称是否相等时,属性类型(二进制和字符串值)不区分大小写。 具有不同但等效的引用,转义或UTF8-hex编码用法的字符串值被认为是相等的。 多值RDN中的组件顺序(例如“ou = Sales + cn = Bob”)并不重要。

    LDAP名称的组件(即RDN)已编号。 具有n个RDN的LDAP名称的索引范围从0到n-1。 该范围可以写为[0,n)。 最右边的RDN位于索引0,最左边的RDN位于索引n-1。 例如,可分辨名称:“CN = Steve Kille,O = Isode Limited,C = GB”按以下顺序编号,范围从0到2:{C = GB,O = Isode Limited,CN = Steve Kille}。 空的LDAP名称由空的RDN列表表示。

    无需同步LdapName实例的并发多线程只读访问。

    除非另有说明,否则将null参数传递给此类中的构造函数或方法的行为将导致抛出NullPointerException。

    从以下版本开始:
    1.5
    另请参见:
    Serialized Form
    • 构造方法摘要

      构造方法  
      构造器 描述
      LdapName​(String name)
      根据给定的专有名称构造LDAP名称。
      LdapName​(List<Rdn> rdns)
      根据解析的RDN组件构造LDAP名称。
    • 方法摘要

      所有方法  实例方法 具体的方法 
      变量和类型 方法 描述
      Name add​(int posn, String comp)
      在此LDAP名称中的指定位置添加单个组件。
      Name add​(int posn, Rdn comp)
      在此LDAP名称中的指定位置添加单个RDN。
      Name add​(String comp)
      将单个组件添加到此LDAP名称的末尾。
      Name add​(Rdn comp)
      将单个RDN添加到此LDAP名称的末尾。
      Name addAll​(int posn, List<Rdn> suffixRdns)
      在此名称中的指定位置添加名称的RDN(按顺序)。
      Name addAll​(int posn, Name suffix)
      在名称中的指定位置添加名称的组件 - 按顺序。
      Name addAll​(List<Rdn> suffixRdns)
      将名称的RDN按顺序添加到此名称的末尾。
      Name addAll​(Name suffix)
      将名称的组件(按顺序)添加到此名称的末尾。
      Object clone()
      生成此名称的新副本。
      int compareTo​(Object obj)
      将此LdapName与指定的Object进行比较以获取订单。
      boolean endsWith​(List<Rdn> rdns)
      确定指定的RDN序列是否形成此LDAP名称的后缀。
      boolean endsWith​(Name n)
      确定此LDAP名称是否以指定的LDAP名称后缀结尾。
      boolean equals​(Object obj)
      确定两个LDAP名称是否相等。
      String get​(int posn)
      以字符串形式检索此LDAP名称的组件。
      Enumeration<String> getAll()
      以字符串枚举的形式检索此名称的组件。
      Name getPrefix​(int posn)
      创建一个名称,其组件由此LDAP名称的组件的前缀组成。
      Rdn getRdn​(int posn)
      以Rdn的形式检索此LDAP名称的RDN。
      List<Rdn> getRdns()
      检索相对可分辨名称的列表。
      Name getSuffix​(int posn)
      创建一个名称,其组件由此LDAP名称中组件的后缀组成。
      int hashCode()
      计算此LDAP名称的哈希码。
      boolean isEmpty()
      确定此LDAP名称是否为空。
      Object remove​(int posn)
      从此LDAP名称中删除组件。
      int size()
      检索此LDAP名称中的组件数。
      boolean startsWith​(List<Rdn> rdns)
      确定指定的RDN序列是否形成此LDAP名称的前缀。
      boolean startsWith​(Name n)
      确定此LDAP名称是否以指定的LDAP名称前缀开头。
      String toString()
      RFC 2253定义并在类描述中描述的格式返回此LDAP名称的字符串表示形式。
    • 构造方法详细信息

      • LdapName

        public LdapName​(List<Rdn> rdns)
        根据解析的RDN组件构造LDAP名称。

        列表中RDN的索引遵循类描述中描述的RDN的编号。

        参数
        rdns - 形成此LDAP名称的 Rdn的非空列表。
    • 方法详细信息

      • size

        public int size()
        检索此LDAP名称中的组件数。
        Specified by:
        size在界面 Name
        结果
        此LDAP名称中的非负数组件。
      • isEmpty

        public boolean isEmpty()
        确定此LDAP名称是否为空。 空名称是零组件。
        Specified by:
        isEmpty在界面 Name
        结果
        如果此LDAP名称为空,则返回true,否则返回false。
      • getAll

        public Enumeration<String> getAll()
        以字符串枚举的形式检索此名称的组件。 此枚举更新此名称的效果未定义。 如果名称的组件为零,则返回空(非null)枚举。 枚举返回的组件的顺序与组描述中描述的组件的编号顺序相同。
        Specified by:
        getAll在界面 Name
        结果
        此LDAP名称的组件的非null枚举。 枚举的每个元素都是String类。
      • get

        public String get​(int posn)
        以字符串形式检索此LDAP名称的组件。
        Specified by:
        get在界面 Name
        参数
        posn - 要检索的组件的从0开始的索引。 必须在[0,size())范围内。
        结果
        索引posn处的非null组件。
        异常
        IndexOutOfBoundsException - 如果posn超出指定范围。
      • getRdn

        public Rdn getRdn​(int posn)
        以Rdn的形式检索此LDAP名称的RDN。
        参数
        posn - 要检索的RDN的从0开始的索引。 必须在[0,size())范围内。
        结果
        索引posn处的非null RDN。
        异常
        IndexOutOfBoundsException - 如果posn超出指定范围。
      • getPrefix

        public Name getPrefix​(int posn)
        创建一个名称,其组件由此LDAP名称的组件的前缀组成。 对此名称的后续更改不会影响返回的名称,反之亦然。
        Specified by:
        getPrefix ,界面 Name
        参数
        posn - 要停止的组件的从0开始的索引。 必须在[0,size()]范围内。
        结果
        LdapName的实例,由[0,posn]范围内的索引处的组件组成。 如果posn为零,则返回空LDAP名称。
        异常
        IndexOutOfBoundsException - 如果posn超出指定范围。
      • getSuffix

        public Name getSuffix​(int posn)
        创建一个名称,其组件由此LDAP名称中组件的后缀组成。 对此名称的后续更改不会影响返回的名称,反之亦然。
        Specified by:
        getSuffix在界面 Name
        参数
        posn - 要启动的组件的从0开始的索引。 必须在[0,size()]范围内。
        结果
        LdapName的实例,由[posn,size())范围内的索引处的组件组成。 如果posn等于size(),则返回空的LDAP名称。
        异常
        IndexOutOfBoundsException - 如果posn超出指定范围。
      • startsWith

        public boolean startsWith​(Name n)
        确定此LDAP名称是否以指定的LDAP名称前缀开头。 名称n是前缀,如果它等于getPrefix(n.size()) - 换句话说,此LDAP名称以'n'开头。 如果n为null或不是类描述中描述的RFC2253格式化名称,则返回false。
        Specified by:
        startsWith接口 Name
        参数
        n - 要检查的LDAP名称。
        结果
        如果 n是此LDAP名称的前缀,则 n true,否则返回false。
        另请参见:
        getPrefix(int posn)
      • startsWith

        public boolean startsWith​(List<Rdn> rdns)
        确定指定的RDN序列是否形成此LDAP名称的前缀。 如果此LdapName至少与rdns一样长,则返回true;对于范围[0,rdns.size())中的每个位置p,组件getRdn(p)与rdns.get(p)匹配。 否则返回false。 如果rdns为null,则返回false。
        参数
        rdns - 要检查的序列号 Rdn
        结果
        如果 rdns形成此LDAP名称的前缀,则 rdns true,否则返回false。
      • endsWith

        public boolean endsWith​(Name n)
        确定此LDAP名称是否以指定的LDAP名称后缀结尾。 名称n是后缀,如果它等于getSuffix(size()-n.size()) - 换句话说,此LDAP名称以'n'结尾。 如果n为null或不是类描述中描述的RFC2253格式化名称,则返回false。
        Specified by:
        endsWith接口 Name
        参数
        n - 要检查的LDAP名称。
        结果
        如果 n是此名称的后缀,则 n true,否则返回false。
        另请参见:
        getSuffix(int posn)
      • endsWith

        public boolean endsWith​(List<Rdn> rdns)
        确定指定的RDN序列是否形成此LDAP名称的后缀。 如果此LdapName至少与rdns一样长,则返回true;对于[size() - rdns.size(),size())范围内的每个位置p,返回组件getRdn(p)与rdns.get(p)匹配。 否则返回false。 如果rdns为null,则返回false。
        参数
        rdns - 要检查的序列号 Rdn
        结果
        如果 rdns形成此LDAP名称的后缀,则 rdns true,否则返回false。
      • addAll

        public Name addAll​(Name suffix)
                    throws InvalidNameException
        将名称的组件(按顺序)添加到此名称的末尾。
        Specified by:
        addAll在界面 Name
        参数
        suffix - 要添加的非null组件。
        结果
        更新的名称(不是新实例)。
        异常
        InvalidNameException - 如果 suffix不是有效的LDAP名称,或者组件的添加将违反此LDAP名称的语法规则。
      • addAll

        public Name addAll​(List<Rdn> suffixRdns)
        将名称的RDN按顺序添加到此名称的末尾。
        参数
        suffixRdns - 要添加的非null后缀 Rdn
        结果
        更新的名称(不是新实例)。
      • addAll

        public Name addAll​(int posn,
                           Name suffix)
                    throws InvalidNameException
        在名称中的指定位置添加名称的组件 - 按顺序。 在第一个新组件的索引(如果有)或之后的此LDAP名称的组件向上移动(远离索引0)以容纳新组件。
        Specified by:
        addAll在界面 Name
        参数
        suffix - 要添加的非null组件。
        posn - 要添加新组件的索引。 必须在[0,size()]范围内。
        结果
        更新的名称(不是新实例)。
        异常
        InvalidNameException - 如果 suffix不是有效的LDAP名称,或者组件的添加将违反此LDAP名称的语法规则。
        IndexOutOfBoundsException - 如果posn超出指定范围。
      • addAll

        public Name addAll​(int posn,
                           List<Rdn> suffixRdns)
        在此名称中的指定位置添加名称的RDN(按顺序)。 在第一个新RDN的索引(如果有)或之后的此LDAP名称的RDN向上移位(远离索引0)以容纳新的RDN。
        参数
        suffixRdns - 要添加的非null后缀 Rdn
        posn - 添加后缀RDN的索引。 必须在[0,size()]范围内。
        结果
        更新的名称(不是新实例)。
        异常
        IndexOutOfBoundsException - 如果posn超出指定范围。
      • add

        public Name add​(String comp)
                 throws InvalidNameException
        将单个组件添加到此LDAP名称的末尾。
        Specified by:
        add在界面 Name
        参数
        comp - 要添加的非null组件。
        结果
        更新的LdapName,而不是新实例。 不能为空。
        异常
        InvalidNameException - 如果在名称末尾添加comp将违反名称的语法。
      • add

        public Name add​(Rdn comp)
        将单个RDN添加到此LDAP名称的末尾。
        参数
        comp - 要添加的非null RDN。
        结果
        更新的LdapName,而不是新实例。 不能为空。
      • add

        public Name add​(int posn,
                        String comp)
                 throws InvalidNameException
        在此LDAP名称中的指定位置添加单个组件。 在新组件的索引(如果有)或之后,此LDAP名称的组件向上移动一个(远离索引0)以容纳新组件。
        Specified by:
        add在界面 Name
        参数
        comp - 要添加的非null组件。
        posn - 要添加新组件的索引。 必须在[0,size()]范围内。
        结果
        更新的LdapName,而不是新实例。 不能为空。
        异常
        IndexOutOfBoundsException - 如果posn超出指定范围。
        InvalidNameException - 如果在指定位置添加comp会违反名称的语法。
      • add

        public Name add​(int posn,
                        Rdn comp)
        在此LDAP名称中的指定位置添加单个RDN。 在新RDN的索引(如果有)或之后,此LDAP名称的RDN向上移动一个(远离索引0)以容纳新的RDN。
        参数
        comp - 要添加的非null RDN。
        posn - 添加新RDN的索引。 必须在[0,size()]范围内。
        结果
        更新的LdapName,而不是新实例。 不能为空。
        异常
        IndexOutOfBoundsException - 如果posn超出指定范围。
      • remove

        public Object remove​(int posn)
                      throws InvalidNameException
        从此LDAP名称中删除组件。 将删除指定位置的此名称的组件。 索引大于此位置的组件(如果有)向下移动(朝向索引0)一。
        Specified by:
        remove接口 Name
        参数
        posn - 要删除的组件的索引。 必须在[0,size())范围内。
        结果
        删除了组件(String)。
        异常
        IndexOutOfBoundsException - 如果posn超出指定范围。
        InvalidNameException - 如果删除组件将违反名称的语法规则。
      • getRdns

        public List<Rdn> getRdns()
        检索相对可分辨名称的列表。 列表的内容是不可修改的。 返回列表中RDN的索引遵循类描述中描述的RDN编号。 如果名称包含零,则返回空列表。
        结果
        作为类Rdn实例的RDN列表的名称。
      • clone

        public Object clone()
        生成此名称的新副本。 对此名称的组件的后续更改不会影响新副本,反之亦然。
        Specified by:
        clone在界面 Name
        重写:
        clone在类 Object
        结果
        此LDAP名称的副本。
        另请参见:
        Cloneable
      • toString

        public String toString()
        RFC 2253定义并在类描述中描述的格式返回此LDAP名称的字符串表示形式。 如果名称为零,则返回空字符串。
        重写:
        toString在类 Object
        结果
        LdapName的字符串表示形式。
      • equals

        public boolean equals​(Object obj)
        确定两个LDAP名称是否相等。 如果obj为null或不是LDAP名称,则返回false。

        如果一个中的每个RDN等于另一个中的相应RDN,则两个LDAP名称相等。 这意味着它们具有相同数量的RDN,并且每个RDN对另一个名称中相应RDN的equals()测试返回true。 有关RDN相等性的定义,请参见Rdn.equals(Object obj)

        重写:
        equalsObject
        参数
        obj - 要比较的可能为null的对象。
        结果
        如果obj等于此LDAP名称,则返回true,否则返回false。
        另请参见:
        hashCode()
      • compareTo

        public int compareTo​(Object obj)
        将此LdapName与指定的Object进行比较以获取订单。 返回负整数,零或正整数,因为此Name小于,等于或大于给定的Object。

        如果obj为null或不是LdapName的实例,则抛出ClassCastException。

        LDAP名称的排序遵循字符串比较的词典规则,其扩展名适用于LDAP名称中的所有RDN。 所有RDN按指定顺序排列,并按字典顺序进行比较。 有关RDN比较规则,请参阅Rdn.compareTo(Object obj)

        如果此LDAP名称按字典顺序小于obj,则返回负数。 如果此LDAP名称按字典顺序大于obj,则返回正数。

        Specified by:
        compareTo在界面 Comparable<Object>
        Specified by:
        compareTo在界面 Name
        参数
        obj - 要比较的非null LdapName实例。
        结果
        一个负整数,零或正整数,因为此Name小于,等于或大于给定的obj。
        异常
        ClassCastException - 如果obj为null或不是LdapName。
        另请参见:
        Comparable.compareTo(Object)
      • hashCode

        public int hashCode()
        计算此LDAP名称的哈希码。 哈希码是该名称的各个RDN的哈希码的总和。
        重写:
        hashCodeObject
        结果
        表示此名称的哈希码的int。
        另请参见:
        equals(java.lang.Object)