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

Управление LdapName (Отличительное имя)

Отличительное имя (DN) используется LDAP в его строковом представлении. Строковый формат, используемый, чтобы представить DN, определяется в RFC 2253. DN составляется из компонентов, названных Относительными Отличительными именами (RDN). Ниже пример DN:

"CN=John Смит, O=Isode Limited, C=GB"

Это состоит из следующего RDNs:

Классы ниже представляют DN и RDN соответственно.

LdapName class реализует интерфейс javax.naming.Name, подобный классам javax.naming.CompositeName и javax.naming.CompoundName.

LdapName и классы Rdn позволяют легкое манипулирование DNs и RDNs. Используя эти API легко создать RDN, разделяя на пары имена и значения. DN может быть создан со списком RDNs. Так же отдельные компоненты DN и RDN могут быть получены от их строкового представления.

LdapName

LdapName может быть создан с его строковым представлением как определено в RFC 2253 или со списком Rdns. Когда прежний путь используется, указанная строка анализируется согласно правилам, определенным в RFC2253. InvalidNameException бросается, если строка не является допустимым DN. Вот пример, который использует конструктора, чтобы проанализировать имя LDAP и напечатать его компоненты.

String name = "cn=Mango,ou=Fruits,o=Food";
try {
    LdapName dn = new LdapName(name);
    System.out.println(dn + " has " + dn.size() + " RDNs: ");
    for (int i = 0; i < dn.size(); i++) {
        System.out.println(dn.get(i));
    }
} catch (InvalidNameException e) {
    System.out.println("Cannot parse name: " + name);
}

Выполнение этого примера с вводом "cn=Mango,ou=Fruits,o=Food" приводит к следующим результатам:

cn=Mango,ou=Fruits,o=Food has 3 RDNs: 
o=Food
ou=Fruits
cn=Mango

LdapName class содержит методы, чтобы получить доступ к его компонентам как к RDNs и строкам, изменить LdapName, сравнить два LdapNames для равенства, и получить строковое представление имени.

Доступ к компонентам имени имени LDAP:

Вот методы, которые можно использовать, чтобы получить доступ к компонентам имени как к RDNs и строкам:

getRdn(int posn)
get(int posn)
getRdns()
getAll()
getPrefix(int posn)
getSuffix(int posn)
clone()

Чтобы получить компонент в определенной позиции в пределах LdapName, Вы используете getRdn () или добираетесь (). Предыдущий пример конструктора показывает пример своего использования. getRdns() возвращает список всего RDNs, и getAll() возвращает все компоненты LdapName как перечисление.

Право, в котором большинство RDN, индексирует 0, и покинутые, в которых большинство RDN, индексируют n-1. Например, отличительное имя: "cn=Mango, ou=Fruits, o=Food" нумеруется в следующей последовательности в пределах от от 0 до 2: {o=Food, ou=Fruits, cn=Mango}

Можно также получить суффикс LdapNames или снабдить префиксом как экземпляр LdapName. Вот example это получает суффикс и префикс имени LDAP.

LdapName dn = new LdapName("cn=Mango, ou=Fruits, o=Food");
Name suffix = dn.getSuffix(1);  // 1 <= index < cn.size()
Name prefix = dn.getPrefix(1);  // 0 <= index < 1

Когда Вы выполняете эту программу, она генерирует следующий вывод:

cn=Mango ou=Fruits
o=Food 

Чтобы сделать копию LdapName, Вы используете клона ().

Изменение имени LDAP

Следующее является методами, которые можно использовать, чтобы изменить имя LDAP:

add(Rdn rdn)
add(String comp)
add(int posn, String comp)
addAll(List suffixRdns)
addAll(Name suffix)
addAll(int posn, List suffixRdns)
addAll(int posn, Name suffix)
remove(int posn)

После создания экземпляра LdapName можно добавить и удалить компоненты из этого. Вот example это добавляет LdapName к существующему LdapName, добавляют компоненты к передней стороне и концу, и удаляют второй компонент.

     LdapName dn = new LdapName("ou=Fruits,o=Food");
     LdapName dn2 = new LdapName("ou=Summer");
     System.out.println(dn.addAll(dn2)); // ou=Summer,ou=Fruits,o=Food
     System.out.println(dn.add(0, "o=Resources")); 
// ou=Summer,ou=Fruits,o=Food,o=Resources
     System.out.println(dn.add("cn=WaterMelon")); 
// cn=WaterMelon,ou=Summer,ou=Fruits,o=Food,o=Resources
     System.out.println(dn.remove(1));  // o=Food
     System.out.println(dn);  
// cn=WaterMelon,ou=Summer,ou=Fruits,o=Resources

Сравнение имени LDAP

Следующее является методами, которые можно использовать, чтобы сравнить два имени LDAP:

compareTo(Object name)
equals(Object name)
endsWith(List)
endWith(Name name)
startsWith(List rdns)
startsWith(Name name)
isEmpty()

Можно использовать compareTo(), чтобы сортировать список экземпляров LdapName. Метод equals() позволяет Вам определять, равны ли два LdapNames синтаксически. Два LdapNames равны, если у них обоих есть то же самое (точный случаем соответствующий) компоненты в том же самом порядке.

С startsWith() и endsWith(), можно учиться, запускается ли LdapName или заканчивается другим LdapName; то есть, является ли LdapName суффиксом или префиксом другого LdapName.

Метод isEmpty() удобства позволяет Вам определить, есть ли у LdapName нулевые компоненты. Можно также использовать выражение size() == 0, чтобы выполнить ту же самую проверку.

Вот пример, CompareLdapNames, это использует некоторые из этих методов сравнения.

LdapName one = new LdapName("cn=Vincent Ryan, ou=People, o=JNDITutorial");
LdapName two = new LdapName("cn=Vincent Ryan");
LdapName three = new LdapName("o=JNDITutorial");
LdapName four = new LdapName("");

System.out.println(one.equals(two));        // false
System.out.println(one.startsWith(three));  // true
System.out.println(one.endsWith(two));      // true
System.out.println(one.startsWith(four));   // true
System.out.println(one.endsWith(four));     // true
System.out.println(one.endsWith(three));    // false
System.out.println(one.isEmpty());          // false
System.out.println(four.isEmpty());         // true
System.out.println(four.size() == 0);       // true

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

Метод ниже получает Вас строковое представление имени LDAP, отформатированного согласно синтаксису, определенному в RFC 2253:

toString()

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

LdapName dn = new LdapName(name);
String str = dn.toString();
System.out.println(str);
LdapName dn2 = new LdapName(str);
System.out.println(dn.equals(dn2));  // true

LdapName как Параметр Методам Контекста

Метод Context требует или составного объекта или составного имени, которое передают как параметр его методам. Следовательно LdapName можно непосредственно передать к методу контекста как показано в LookupLdapName:

// Create the initial context
Context ctx = new InitialContext(env);

// An LDAP name
LdapName dn = new LdapName("ou=People,o=JNDITutorial");

// Perform the lookup using the dn
Object obj = ctx.lookup(dn);

Точно так же, когда следствия возврата методов Context списка (), listBindings (), или поиск () операции, DN может быть получен, вызывая getNameInNamespace(). LdapName может быть создан непосредственно из DN как показано в примере, RetrievingLdapName:

while (answer.hasMore()) {
    SearchResult sr = (SearchResult) answer.next();
    String name = sr.getNameInNamespace();
    System.out.println(name);
    LdapName dn = new LdapName(name);

    // do something with the dn

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

Предыдущая страница: Управляйте Управлением Отсылкой
Следующая страница: Управление Именем Родственника Дистрингуишеда (RDN)