Module java.naming

Class Rdn

java.lang.Object
javax.naming.ldap.Rdn
所有已实现的接口:
Serializable, Comparable<Object>

public class Rdn extends Object implements Serializable, Comparable<Object>
该类表示相对专有名称(RDN),即由RFC 2253指定的专有名称的组成部分。RDN的一个示例是"OU=Sales+CN=J.Smith"。在此示例中,RDN由多个属性类型/值对组成。RDN的解析如LdapName类描述的类描述中所述。

Rdn类表示属性类型/值映射的RDN,可以使用Attributes查看。此外,它包含方便的方法,允许在Rdn包含单个属性类型/值对时轻松检索类型和值,这是典型用法中的情况。它还包含帮助方法,允许对未格式化的属性值进行转义和根据RFC2253中定义的转义语法格式化的值进行取消转义。对于以对象形式接受或返回属性值的方法,该值可以是字符串(未转义形式)或字节数组。

Rdn将正确解析所有有效的RDN,但在解析无效的RDN时不会尝试检测所有可能的违规行为。它在接受无效的RDN时是“宽容的”。名称的“有效性”最终在将其提供给LDAP服务器时确定,LDAP服务器可能根据其模式信息和互操作性考虑因素接受或拒绝名称。

以下代码示例显示如何使用以类型和值作为参数的构造函数构造Rdn:

      Rdn rdn = new Rdn("cn", "Juicy, Fruit");
      System.out.println(rdn.toString());
 
最后一行将打印cn=Juicy\, Fruit。可以使用unescapeValue()方法取消转义逗号,从而得到原始值"Juicy, Fruit"。使用escapeValue()方法在逗号前添加转义。

可以通过RFC 2253中定义的RDN字符串的字符串表示形式实例化此类,如以下代码示例所示:

      Rdn rdn = new Rdn("cn=Juicy\\, Fruit");
      System.out.println(rdn.toString());
 
最后一行将打印cn=Juicy\, Fruit

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

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

自从:
1.5
参见:
  • Constructor Details

    • Rdn

      public Rdn(Attributes attrSet) throws InvalidNameException
      从给定属性集构造一个Rdn。参见Attributes

      字符串属性值不被解释为RFC 2253格式化的RDN字符串。也就是说,这些值被直接使用(未解析)并假定为未转义。

      参数:
      attrSet - 包含非空属性的非空属性,其中包含类型/值映射。
      抛出:
      InvalidNameException - 如果attrSet的内容无法用于构造有效的RDN。
    • Rdn

      public Rdn(String rdnString) throws InvalidNameException
      从给定字符串构造一个Rdn。此构造函数接受根据RFC 2253中定义的规则格式化的字符串,并在LdapName的类描述中描述。
      参数:
      rdnString - 非空且非空的RFC2253格式化字符串。
      抛出:
      InvalidNameException - 如果在解析rdnString时发生语法错误。
    • Rdn

      public Rdn(Rdn rdn)
      从给定的rdn构造一个Rdn。将rdn的内容简单复制到新创建的Rdn中。
      参数:
      rdn - 要复制的非空Rdn。
    • Rdn

      public Rdn(String type, Object value) throws InvalidNameException
      从给定属性类型和值构造一个Rdn。字符串属性值不被解释为RFC 2253格式化的RDN字符串。也就是说,这些值被直接使用(未解析)并假定为未转义。
      参数:
      type - 非空且非空的字符串属性类型。
      value - 非空且非空的属性值。
      抛出:
      InvalidNameException - 如果类型/值无法用于构造有效的RDN。
      参见:
  • Method Details

    • getValue

      public Object getValue()
      检索此Rdn的一个值。这是一个方便的方法,用于在RDN包含单个类型和值映射时获取值,这是常见的RDN用法。

      对于多值RDN,此方法返回与getType()方法返回的类型对应的值。

      返回:
      非空属性值。
    • getType

      public String getType()
      检索此Rdn的一个类型。这是一个方便的方法,用于在RDN包含单个类型和值映射时获取类型,这是常见的RDN用法。

      对于多值RDN,未对类型/值对进行特定顺序定义。在这种情况下,此方法返回一个类型/值对的类型。getValue()方法返回与此方法返回的类型对应的值。

      返回:
      非空属性类型。
    • toString

      public String toString()
      返回此Rdn作为一个字符串,该字符串以RFC 2253中定义的格式表示,并在LdapName的类描述中描述。
      覆盖:
      toString 在类 Object
      返回:
      Rdn的字符串表示形式。
    • compareTo

      public int compareTo(Object obj)
      将此Rdn与指定的对象进行比较以确定顺序。如果此Rdn小于、等于或大于给定的对象,则返回负整数、零或正整数。

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

      RDN的属性类型和值对将相互对齐并按字典顺序进行比较。多值RDN中组件的顺序(例如"ou=Sales+cn=Bob")不重要。

      指定者:
      compareTo 在接口 Comparable<Object>
      参数:
      obj - 要与之比较的非空对象。
      返回:
      如果此Rdn小于、等于或大于给定的对象,则返回负整数、零或正整数。
      抛出:
      ClassCastException - 如果obj为null或不是Rdn。
    • equals

      public boolean equals(Object obj)
      将指定的对象与此Rdn进行比较以确定相等性。如果给定对象也是Rdn,并且两个Rdn表示相同的属性类型和值映射,则返回true。多值RDN中组件的顺序(例如"ou=Sales+cn=Bob")不重要。

      类型和值的相等匹配如下进行:

      • 类型将忽略大小写进行比较。
      • 具有不同但等效的引号、转义或UTF8-hex编码用法的字符串值被视为相等。在比较过程中忽略值的大小写。

      如果obj为null或不是Rdn的实例,则返回false。

      覆盖:
      equals 在类 Object
      参数:
      obj - 用于与此Rdn比较相等性的对象。
      返回:
      如果指定的对象等于此Rdn,则返回true。
      参见:
    • hashCode

      public int hashCode()
      返回此RDN的哈希码。根据equals方法相等的两个RDN将具有相同的哈希码。
      覆盖:
      hashCode 在类 Object
      返回:
      表示此Rdn的哈希码的int值。
      参见:
    • toAttributes

      public Attributes toAttributes()
      检索包含在此Rdn中的类型/值映射的Attributes视图。
      返回:
      包含此Rdn的类型/值映射的非空属性。
    • size

      public int size()
      检索此Rdn中属性类型/值对的数量。
      返回:
      此Rdn中类型/值对的非负数。
    • escapeValue

      public static String escapeValue(Object val)
      给定属性的值,根据RFC 2253中指定的规则返回一个转义字符串。

      例如,如果val为"Sue, Grabbit and Runn",则此方法返回的转义值为"Sue\, Grabbit and Runn"。

      字符串值表示为String,二进制值表示为字节数组。

      参数:
      val - 要转义的非空对象。
      返回:
      转义的字符串值。
      抛出:
      ClassCastException - 如果val不是String或字节数组。
    • unescapeValue

      public static Object unescapeValue(String val)
      给定根据RFC 2253中指定的规则格式化的属性值字符串,返回未格式化的值。转义符和引号被剥离,十六进制编码的UTF-8被转换为等效的UTF-16字符。将字符串值作为String返回,将二进制值作为字节数组返回。

      RFC 2253中定义了合法和非法值。此方法在接受值方面很宽松,并不捕获所有非法值。因此,传入非法值可能不一定会触发IllegalArgumentException

      参数:
      val - 要取消转义的非空字符串。
      返回:
      未转义的值。
      抛出:
      IllegalArgumentException - 当提供非法值时。