|
Spec-Zone .ru
спецификации, руководства, описания, API
|
class javax.naming.ldap.Rdn представляет Относительное Отличительное имя (RDN) как определено в . RDN представляет компонент DN как объяснено в
Rdn class обеспечивает методы, чтобы получить доступ к паре (ам) имя/значение RDN, получить его строковое представление, получить представление , сравнить и определить равенство RDNs и методов, чтобы выйти и невыйти из части значения RDN.
Rdn class является неизменным.
Rdn может быть создан с указанным именем и парой значения, если это - единственное имя/значение соединенный RDN. Для многозначного RDN следует создать набор атрибута, состоящий из всех пар имя/значение, и использовать конструктора, который берет Attributes в качестве параметра. Можно также создать Rdn из его строкового представления, определенного в . Наконец, можно клонировать Rdn, используя его конструктора копии. Вот
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, составленный из единственной пары типа/значения, метод , возвращает тип, и метод возвращает значение RDN. Метод возвращает представление атрибута пар типа/значения.
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, можно использовать:
Когда Вы используете конструктора Rdn, который берет параметр String, Вы предоставляете строковое представление RDN, и возвращаете экземпляр Rdn. Чтобы сделать реверс, то есть, получить строковое представление экземпляра Rdn, Вы используете toString (). Результат toString () может быть возвращен конструктору Rdn, чтобы произвести экземпляр Rdn, который равен исходному экземпляру Rdn.
Вот
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:
Можно использовать compareTo (), чтобы сортировать список экземпляров Rdn. равняется (), позволяет Вам определять, равны ли два Rdns синтаксически. Два Rdns равны, если у них обоих есть то же самое (точный случаем соответствующий) пары типа/значения. Порядок компонентов в многозначном RDNs не является существенным.
Вот
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 и оба использования '\' (наклонная черта влево), чтобы выйти из специальных символов. И поэтому Java отформатированные виды Строки RDN как указано ниже: cn=Juicy\\, Fruit Отметьте, что, вышеупомянутые правила форматирования применяются только к компоненту значения Rdn. Rdn class обеспечивает два метода static, чтобы обработать автоматический выход и невыход значений RDN:
.
// 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() можно получить исходную строку из отформатированного значения.
// 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);