javax.naming.ldap

接口
异常
java.lang.Object
  继承者 javax.naming.ldap.LdapName
所有已实现的接口:
Serializable, Cloneable, Comparable< Object>, Name

public class LdapName
     
extends Object
implements Name

此类表示 RFC 2253 指定的标识名。标识名(即 DN)由名为相对标识名(即 RDN)的一列有序组件组成。RFC 2253 中描述了 DN 的语法细节。

此类对 RFC 2253 中存在的一些歧义解释如下:

  • RFC 2253 未定义术语“空白”。在其位置使用 ASCII 空白字符 0x20 (" ")。
  • 空白在 ','、';'、'=' 和 '+' 的两边都允许使用。这种空白可以被此代码接受,但不是此代码生成的,在比较名称时将被忽略。
  • 包含 '=' 或非先导 '#' 字符(取消转义)的 AttributeValue 字符串是可以接受的。

传递给 LdapName 或由它返回的字符串名称使用完整的 Unicode 字符集。它们也可能包含一些编码为 UTF-8 的字符,用三字符的子字符串(如 "\\B4")表示其中每个八位组。但是,它们不能包含编码为 UTF-8 并使用该字符串中的单个字符表示每个八位组的字符:因为这可能会使含义不明确。

LdapName 将恰当地解析所有有效名称,但是在解析无效名称时不会尝试检测所有可能的错误情况。在接受无效名称时,它显得很“大方”。名称的“有效性”在将名称提供给 LDAP 服务器时最终确定,服务器将基于名称的模式信息和互操作性考虑之类的因素来决定接受还是拒绝该名称。

在测试名称的相等性时,属性类型(二进制和字符串值)不区分大小写。值不同但使用等效的引用、转义或 UTF8 十六进制编码的字符串视为相等。多值 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
另请参见:
序列化表格

构造方法摘要
LdapName(List<Rdn> rdns)
          在给定已解析 RDN 组件的情况下构造 LDAP 名称。
LdapName(String name)
          根据给定标识名构造 LDAP 名称。
 
方法摘要
 Name add(int posn, Rdn comp)
          将单个 RDN 添加到此 LDAP 名称中的指定位置。
 Name add(int posn, String comp)
          将单个组件添加到此 LDAP 名称中的指定位置。
 Name add(Rdn comp)
          将单个 RDN 添加到此 LDAP 名称的末尾。
 Name add(String comp)
          将单个组件添加到此 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()
          返回一个此 LDAP 名称的字符串表示形式,该表示形式使用 RFC 2253 定义并在类描述中描述的格式。
 
从类 java.lang.Object 继承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait
 

构造方法详细信息

LdapName

public LdapName(String name)
         throws InvalidNameException
根据给定标识名构造 LDAP 名称。

参数:
name - 此为根据在 RFC 2253 中定义的规则格式化的非 null 标识名。
抛出:
InvalidNameException - 如果检测到违反语法的情况。
另请参见:
Rdn.escapeValue(Object value)

LdapName

public LdapName(List<Rdn> rdns)
在给定已解析 RDN 组件的情况下构造 LDAP 名称。

列表中 RDN 的索引遵从类描述中描述的 RDN 编号方式。

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

size

public int size()
检索此 LDAP 名称中的组件数。

指定者:
接口 Name 中的 size
返回:
此 LDAP 名称中的非负组件数。

isEmpty

public boolean isEmpty()
确定此 LDAP 名称是否为空。空名称是没有任何组件的名称。

指定者:
接口 Name 中的 isEmpty
返回:
如果此 LDAP 名称为空,则返回 true,否则返回 false。

getAll

public Enumeration<String> getAll()
以字符串枚举的形式检索此名称的组件。在此枚举上更新此名称的结果是不确定的。如果该名称没有组件,则返回空(非 null)枚举。枚举返回组件的顺序与根据类描述中的描述对组件进行编号的顺序相同。

指定者:
接口 Name 中的 getAll
返回:
此 LDAP 名称组件所组成的非 null 枚举。每个枚举元素都属于 String 类。

get

public String get(int posn)
以字符串形式检索此 LDAP 名称的组件。

指定者:
接口 Name 中的 get
参数:
posn - 要检索的从 0 开始的组件索引。该索引必须在范围 [0,size()) 内。
返回:
位于索引 posn 处的非 null 组件。
抛出:
IndexOutOfBoundsException - 如果 posn 超出指定范围。

getRdn

public Rdn getRdn(int posn)
以 Rdn 形式检索此 LDAP 名称的 RDN。

参数:
posn - 要检索的从 0 开始的 RDN 索引。该索引必须在范围 [0,size()) 内。
返回:
位于索引 posn 处的非 null RDN。
抛出:
IndexOutOfBoundsException - 如果 posn 超出指定范围。

getPrefix

public Name getPrefix(int posn)
创建一个名称,其组件由此 LDAP 名称中组件的前缀组成。对此名称进行的后续更改不会影响返回的名称,反之亦然。

指定者:
接口 Name 中的 getPrefix
参数:
posn - 从 0 开始的组件索引,在该索引处停止。该索引必须在范围 [0,size()] 内。
返回:
由索引范围在 [0,posn) 之间的组件组成的 LdapName 实例。如果 posn 为零,则返回空 LDAP 名称。
抛出:
IndexOutOfBoundsException - 如果 posn 超出指定范围。

getSuffix

public Name getSuffix(int posn)
创建一个名称,其组件由此 LDAP 名称中组件的后缀组成。对此名称进行的后续更改不会影响返回的名称,反之亦然。

指定者:
接口 Name 中的 getSuffix
参数:
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。

指定者:
接口 Name 中的 startsWith
参数:
n - 要检查的 LDAP 名称。
返回:
如果 n 是此 LDAP 名称的前缀,则返回 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 名称的前缀,则返回 true,否则返回 false。

endsWith

public boolean endsWith(Name n)
确定此 LDAP 名称是否以某一指定 LDAP 名称后缀结尾。如果名称 n 等于 getSuffix(size()-n.size()),则该名称是后缀,换句话说,此 LDAP 名称以 'n' 结尾。如果 n 为 null 或者不是按照类描述中的描述进行格式化的 RFC2253,则返回 false。

指定者:
接口 Name 中的 endsWith
参数:
n - 要检查的 LDAP 名称。
返回:
如果 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 名称的后缀,则返回 true,否则返回 false。

addAll

public Name addAll(Name suffix)
            throws InvalidNameException
按顺序将名称的组件添加到此名称的末尾。

指定者:
接口 Name 中的 addAll
参数:
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),以容纳新组件。

指定者:
接口 Name 中的 addAll
参数:
suffix - 要添加的非 null 组件。
posn - 在其所在位置处添加新组件的索引。该索引必须在范围 [0,size()] 内。
返回:
更新的名称(而不是新实例)。
抛出:
InvalidNameException - 如果 suffix 不是一个有效的 LDAP 名称,或者添加组件将违反此 LDAP 名称的语法规则。
IndexOutOfBoundsException - 如果 posn 超出指定范围。

addAll

public Name addAll(int posn,
                   List<Rdn> suffixRdns)
按顺序将名称的 RDN 添加到此名称中的指定位置。此 LDAP 名称位于第一个新 RDN 的索引(如果有)处或这之后的 RDN 被上移(远离索引 0),以容纳新 RDN。

参数:
suffixRdns - 要添加的非 null 后缀 Rdn
posn - 在其所在位置处添加后缀 RDN 的索引。该索引必须在范围 [0,size()] 内。
返回:
更新的名称(而不是新实例)。
抛出:
IndexOutOfBoundsException.如果 - posn 超出指定范围。

add

public Name add(String comp)
         throws InvalidNameException
将单个组件添加到此 LDAP 名称的末尾。

指定者:
接口 Name 中的 add
参数:
comp - 要添加的非 null 组件。
返回:
更新的 LdapName,而不是新实例。不能为 null。
抛出:
InvalidNameException - 如果在该名称末尾添加 comp 违反该名称的语法。

add

public Name add(Rdn comp)
将单个 RDN 添加到此 LDAP 名称的末尾。

参数:
comp - 要添加的非 null RDN。
返回:
更新的 LdapName,而不是新实例。不能为 null。

add

public Name add(int posn,
                String comp)
         throws InvalidNameException
将单个组件添加到此 LDAP 名称中的指定位置。此 LDAP 名称位于新组件的索引(如果有)处或这之后的组件被上移(远离索引 0)一位,以容纳新组件。

指定者:
接口 Name 中的 add
参数:
comp - 要添加的非 null 组件。
posn - 在其所在位置处添加新组件的索引。该索引必须在范围 [0,size()] 内。
返回:
更新的 LdapName,而不是新实例。不能为 null。
抛出:
IndexOutOfBoundsException - 如果 posn 超出指定范围。
InvalidNameException - 如果在指定位置添加 comp 违反该名称的语法。

add

public Name add(int posn,
                Rdn comp)
将单个 RDN 添加到此 LDAP 名称中的指定位置。此 LDAP 名称位于新 RDN 的索引(如果有)处或这之后的 RDN 被上移(远离索引 0)一位,以容纳新 RDN。

参数:
comp - 要添加的非 null RDN。
posn - 在其所在位置处添加新 RDN 的索引。该索引必须在范围 [0,size()] 内。
返回:
更新的 LdapName,而不是新实例。不能为 null。
抛出:
IndexOutOfBoundsException - 如果 posn 超出指定范围。

remove

public Object remove(int posn)
              throws InvalidNameException
从此 LDAP 名称中移除一个组件。移除此名称位于指定位置处的组件。索引大于此位置的组件(如果有)都被下移(朝向索引 0)一位。

指定者:
接口 Name 中的 remove
参数:
posn - 要移除的组件的索引。该索引必须在范围 [0,size()) 内。
返回:
移除的组件(一个 String)。
抛出:
IndexOutOfBoundsException - 如果 posn 超出指定范围。
InvalidNameException - 如果删除组件将违反该名称的语法规则。

getRdns

public List<Rdn> getRdns()
检索相对标识名列表。列表的内容不可修改。返回列表中 RDN 的索引遵从类描述中描述的 RDN 编号方式。如果名称没有组件,则返回空列表。

返回:
作为 RDN 列表的名称,这些 RDN 是 Rdn 类的实例。

clone

public Object clone()
生成此名称的新副本。对此名称的组件进行的后续更改不会影响新副本,反之亦然。

指定者:
接口 Name 中的 clone
覆盖:
Object 中的 clone
返回:
此 LDAP 名称的副本。
另请参见:
Cloneable

toString

public String toString()
返回一个此 LDAP 名称的字符串表示形式,该表示形式使用 RFC 2253 定义并在类描述中描述的格式。如果名称没有组件,则返回空字符串。

覆盖:
Object 中的 toString
返回:
LdapName 的字符串表示形式。

equals

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

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

覆盖:
Object 中的 equals
参数:
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,则返回一个正数。

指定者:
接口 Comparable<Object> 中的 compareTo
指定者:
接口 Name 中的 compareTo
参数:
obj - 要与之比较的非 null LdapName 实例。
返回:
根据此 Name 小于、等于还是大于指定 obj 分别返回负整数、零或正整数。
抛出:
ClassCastException - 如果 obj 为 null 或者不是一个 LdapName。
另请参见:
Comparable.compareTo(Object)

hashCode

public int hashCode()
计算此 LDAP 名称的哈希码。该哈希码是此名称各个 RDN 哈希码的总和。

覆盖:
Object 中的 hashCode
返回:
表示此名称的哈希码的 int。
另请参见:
equals(java.lang.Object)