2016-06-24 2 views
0

JNDI InitialLdapContext класса позволяет мне получить атрибуты записи LDAP в одной строке, если различающееся имя известно:Получения оперативных (внутренние) LDAP атрибуты с помощью JNDI в одной партии

Attributes attributes = ctx.getAttributes(entryDN); 

Однако это делает не включают в себя операционные атрибуты, такие как entryCSN, modifyTimestamp и т.д. конечно, всегда можно указать, какие атрибуты, чтобы получить с помощью массива строк:

Attributes attributes = ctx.getAttributes(entryDN, new String[] {"entryCSN"}); 

Но тогда только указанные атрибуты возвращаются.

Вещи, которые я попробовал, но не работает для меня:

  1. Получение атрибутов с помощью ctx.search()

    Я знаю, что я могу получить все атрибуты через поиск (см here), но я не хотите, чтобы a) выполнял весь запрос Ldap, если я уже знаю dn и b) для того, чтобы иметь дело с громоздким набором результатов поиска.

  2. Выполнение второго запроса только для операционного атрибута

    Конечно, я могу сделать только второй запрос, но я хочу, чтобы сохранить дополнительную поездку и добавить вторые атрибуты первых, как это:

    Attributes attributes = ctx.getAttributes(entryDN); 
    attributes.put(ctx.getAttributes(entryDN, new String[] {"entryCSN"}).get("entryCSN")); 
    

    результат NoSuchElementException. StackTrace:

    Exception thrown: java.util.NoSuchElementException: Vector Enumeration 
    at java.util.Vector$1.nextElement(Vector.java:352) 
    at javax.naming.directory.BasicAttribute$ValuesEnumImpl.nextElement(BasicAttribute.java:537) 
    
  3. Список всех атрибутов в строке массива

    Поскольку записи Ldap вернулся могут быть различные классы объектов и имеют, следовательно, различные атрибуты, я не вижу никакого практического способа сделать это.

Кто-нибудь знает, как получить обычные атрибуты и эксплуатационные атрибуты за одну поездку?

ответ

1

Для атрибутов, определенных в RFC RFID, имеется 2 магических значения: "*" означает все атрибуты пользователя. "+" означает все эксплуатационные атрибуты.

Следующий код должен работать:

Attributes attributes = ctx.getAttributes(entryDN, new String[] {"*", "+"}); 
Смежные вопросы