Spec-Zone .ru
спецификации, руководства, описания, API
След: Именование Java и Интерфейс Каталога
Урок: Новые функции в JDK 5.0 и JDK 6
Управление Именем Родственника Дистрингуишеда (RDN)
Домашняя страница > Именование Java и Интерфейс Каталога > Новые функции в JDK 5.0 и JDK 6

Управление Именем Родственника Дистрингуишеда (RDN)

class javax.naming.ldap.Rdn представляет Относительное Отличительное имя (RDN) как определено в RFC 2253. RDN представляет компонент DN как объяснено в Управлении урок LdapName. RDN составляется из пары () значения и типа. Примеры RDNs:

Rdn class обеспечивает методы, чтобы получить доступ к паре (ам) имя/значение RDN, получить его строковое представление, получить представление Attributes, сравнить и определить равенство RDNs и методов, чтобы выйти и невыйти из части значения RDN.

Rdn class является неизменным.

Построение Rdn

Rdn может быть создан с указанным именем и парой значения, если это - единственное имя/значение соединенный RDN. Для многозначного RDN следует создать набор атрибута, состоящий из всех пар имя/значение, и использовать конструктора, который берет Attributes в качестве параметра. Можно также создать Rdn из его строкового представления, определенного в RFC 2253. Наконец, можно клонировать Rdn, используя его конструктора копии. Вот example это создает RDNs использование различных типов конструкторов.

        Rdn rdn1 = new Rdn("ou= Juicy\\, Fruit");
        System.out.println("rdn1:" + rdn1.toString());

        Rdn rdn2 = new Rdn(rdn1);
        System.out.println("rdn2:" + rdn2.toString());

        Attributes attrs = new BasicAttributes();
        attrs.put("ou", "Juicy, Fruit");
        attrs.put("cn", "Mango");
        Rdn rdn3 = new Rdn(attrs);
        System.out.println("rdn3:" + rdn3.toString());

        Rdn rdn4 = new Rdn("ou", "Juicy, Fruit");
        System.out.println("rdn4:" + rdn4.toString());

Доступ к парам типа/значения RDN

Тип/значения и RDN могут быть получены, используя методы ниже:

getType()
getValue()
toAttributes()

Для RDN, составленный из единственной пары типа/значения, метод getType(), возвращает тип, и метод getValue() возвращает значение RDN. Метод toAttributes() возвращает представление атрибута пар типа/значения. example ниже печатных изданий пары типа/значения RDNs.

        Attributes attrs = new BasicAttributes();
        attrs.put("o", "Yellow");
        attrs.put("cn", "Mango");

        // create a binary value for the RDN
        byte[] mangoJuice = new byte[6];
        for (int i = 0; i < mangoJuice.length; i++) {
            mangoJuice[i] = (byte) i;
        }
        attrs.put("ou", mangoJuice);
        Rdn rdn = new Rdn(attrs);
        
        System.out.println();
        System.out.println("size:" + rdn.size());
        System.out.println("getType(): " + rdn.getType());
        System.out.println("getValue(): " + rdn.getValue());
        
        // test toAttributes
        System.out.println();
        System.out.println("toAttributes(): " + rdn.toAttributes());

Получение Строкового Представления

Чтобы получить строковое представление RDN, отформатированного согласно синтаксису, определенному в RFC 2253, можно использовать:

toString()

Когда Вы используете конструктора Rdn, который берет параметр String, Вы предоставляете строковое представление RDN, и возвращаете экземпляр Rdn. Чтобы сделать реверс, то есть, получить строковое представление экземпляра Rdn, Вы используете toString (). Результат toString () может быть возвращен конструктору Rdn, чтобы произвести экземпляр Rdn, который равен исходному экземпляру Rdn.

Вот example:

Rdn rdn = new Rdn("cn=Juicy\\,Fruit");
String str = rdn.toString();
System.out.println(str);
Rdn rdn2 = new Rdn(str);
System.out.println(rdn.equals(rdn2));    // true

Сравнение RDNs

Методы ниже включают сравнению RDNs:

equals(Object Rdn)
compareTo(Object Rdn)

Можно использовать compareTo (), чтобы сортировать список экземпляров Rdn. равняется (), позволяет Вам определять, равны ли два Rdns синтаксически. Два Rdns равны, если у них обоих есть то же самое (точный случаем соответствующий) пары типа/значения. Порядок компонентов в многозначном RDNs не является существенным.

Вот example:

        Rdn one = new Rdn("ou=Sales+cn=Bob");
        Rdn two = new Rdn("cn=Bob+ou=Sales");
        Rdn three = new Rdn("ou=Sales+cn=Bob+c=US");
        Rdn four = new Rdn("cn=lowercase");
        Rdn five = new Rdn("cn=LowerCASE");
        System.out.println(one.equals(two));    // true
        System.out.println(two.equals(three));  // false
        System.out.println(one.equals(three));  // false
        System.out.println(four.equals(five));  // true

Выход и Невыход Специальных Символов

Одно из лучшего использования class Rdn - то, когда нужно иметь дело с DNs, состоящим из специальных символов. Это автоматически заботится о выходе и невыходе из специальных символов. Символы такой имеют '\' (наклонная черта влево), ',' (запятая), + (плюс) и т.д. имеют определенное семантическое согласно RFC 2253. Можно найти список всех специальных символов в RFC2253. Когда эти символы используются в качестве литералов в DN, их нужно оставить с '\' (blackslash).

Например, рассмотрите RDN: cn=Juicy, Fruit Символ, (запятая), появляющаяся между Сочным и Фруктами, является специальным символом, которого нужно оставить '\' (blackslash). Получающееся синтаксически отформатировало взгляды RDN как указано ниже: cn=Juicy\, Fruit Однако, '\' символ самой (наклонной черты влево) является специальным символом согласно Строковому синтаксису Языка Java, и это нуждается к оставленному с '\' (наклонная черта влево) снова. Строковый формат Языка Java и RFC 2253 оба использования '\' (наклонная черта влево), чтобы выйти из специальных символов. И поэтому Java отформатированные виды Строки RDN как указано ниже: cn=Juicy\\, Fruit Отметьте, что, вышеупомянутые правила форматирования применяются только к компоненту значения Rdn. Rdn class обеспечивает два метода static, чтобы обработать автоматический выход и невыход значений RDN:

escapeValue()
unescapeValue()

example ниже шоу, как получить строковое представление DN, не имея необходимость иметь дело с синтаксисом для того, чтобы обработать специальные символы, определенные в RFC 2253.

    // DN with ',' (comma)
    String unformatted = "Juicy, Fruit";
    String formatted = Rdn.escapeValue(unformatted);
    LdapName dn = new LdapName("cn=" + formatted);
    System.out.println("dn:" + dn);


    unformatted = "true+false";
    formatted = Rdn.escapeValue(unformatted); 
    dn = new LdapName("cn=" + formatted);
    System.out.println("dn:" + dn);

    // DN with a binary value as one one of its attribute value
    byte[] bytes = new byte[] {1, 2, 3, 4};
    formatted = Rdn.escapeValue(bytes);
    System.out.println("Orig val: " + bytes + "Escaped val: " + formatted);

Так же использование статического метода unescapeValue() можно получить исходную строку из отформатированного значения. Here пример для того, чтобы получить исходное значение.

    // DN with ',' (comma)
    String unformatted = "Juicy, Fruit";
    String formatted = Rdn.escapeValue(unformatted);
    System.out.println("Formatted:" + formatted);
    Object original = Rdn.unescapeValue(formatted);
    System.out.println("Original:" +  original);  

    // DN with a '+' (plus)
    unformatted = "true+false";
    formatted = Rdn.escapeValue(unformatted); 
    System.out.println("Formatted:" + formatted);
    original = Rdn.unescapeValue(formatted);
    System.out.println("Original:" +  original);  

    // DN with a binary value as one one of its attribute value
    byte[] bytes = new byte[] {1, 2, 3, 4};
    formatted = Rdn.escapeValue(bytes);
    System.out.println("Formatted:" + formatted);
    original = Rdn.unescapeValue(formatted);
    System.out.println("Original:" +  original);  

Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Управление LdapName (Отличительное имя)
Следующая страница: Установка Тайм-аута для Операций Ldap