Module  java.naming
软件包  javax.naming.ldap

Class LdapName

  • All Implemented Interfaces:
    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字符串被接受。

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

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

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

    LDAP名称的组件,即RDNs的编号。 具有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
    • 构造方法摘要

      构造方法  
      Constructor 描述
      LdapName​(String name)
      从给定的可分辨名称构造一个LDAP名称。
      LdapName​(List<Rdn> rdns)
      给出其解析的RDN组件构造一个LDAP名称。
    • 方法摘要

      所有方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      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与指定的对象进行比较。
      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)
      检索此LDAP名称的RDN作为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​()
        检索此名称的组件作为字符串的枚举。 在此枚举上更新此名称的效果未定义。 如果名称具有零个组件,则返回一个空(非空)枚举。 枚举返回的组件的顺序与组件按照类描述中所描述的顺序相同。
        Specified by:
        getAll在接口 Name
        结果
        此LDAP名称的组件的非空枚举。 枚举的每个元素都是String类。
      • get

        public String get​(int posn)
        以此字符串形式检索此LDAP名称的组件。
        Specified by:
        get在接口 Name
        参数
        posn - 要检索的组件的基于0的索引。 必须在[0,size())范围内。
        结果
        索引posn处的非空组件。
        异常
        IndexOutOfBoundsException - 如果posn在指定范围之外。
      • getRdn

        public Rdn getRdn​(int posn)
        检索此LDAP名称的RDN作为Rdn。
        参数
        posn - 要检索的RDN的基于0的索引。 必须在[0,size())范围内。
        结果
        索引posn处的非空RDN。
        异常
        IndexOutOfBoundsException - 如果posn在指定范围之外。
      • getPrefix

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

        public Name getSuffix​(int posn)
        创建一个名称,其组件由此LDAP名称中的组件的后缀组成。 此名称的后续更改不会影响返回的名称,反之亦然。
        Specified by:
        getSuffix在接口 Name
        参数
        posn - 要开始的组件的基于0的索引。 必须在[0,size()]范围内。
        结果
        由范围[posn,size())中的索引组成的LdapName的实例。 如果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 - 要添加的非零组件。
        结果
        更新的名称(不是新的实例)。
        异常
        InvalidNameException - 如果 suffix不是有效的LDAP名称,或者添加组件将违反此LDAP名称的语法规则。
      • addAll

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

        public Name addAll​(int posn,
                           Name suffix)
                    throws InvalidNameException
        在名称中的指定位置添加名称的组件。 第一个新组件的索引(如果有的话)或之后的此LDAP名称的组件向上移动(远离索引0)以适应新的组件。
        Specified by:
        addAll在接口 Name
        参数
        suffix - 要添加的非零组件。
        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 - 要添加的非空后缀 Rdn
        posn - 添加后缀RDN的索引。 必须在[0,size()]范围内。
        结果
        更新的名称(不是新的实例)。
        异常
        IndexOutOfBoundsException - 如果posn在指定范围之外。
      • add

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

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

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

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

        public Object remove​(int posn)
                      throws InvalidNameException
        从此LDAP名称中删除组件。 该名称在指定位置的组件将被删除。 索引大于此位置(如果有)的组件向下移动(朝向索引0)1。
        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
        重写:
        cloneObject
        结果
        该LDAP名称的副本。
        另请参见:
        Cloneable
      • toString

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

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

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

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

        public int compareTo​(Object obj)
        将此LdapName与指定的对象进行比较。 返回一个负整数,零或正整数,因为该名称小于,等于或大于给定的对象。

        如果obj为空或不是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 - 与之比较的非空LdapName实例。
        结果
        负整数,零或正整数,因为此名称小于,等于或大于给定的obj。
        异常
        ClassCastException - 如果obj为空或不是LdapName。
        另请参见:
        Comparable.compareTo(Object)
      • hashCode

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