JNDI InitialLdapContext
класса позволяет мне получить атрибуты записи LDAP в одной строке, если различающееся имя известно:Получения оперативных (внутренние) LDAP атрибуты с помощью JNDI в одной партии
Attributes attributes = ctx.getAttributes(entryDN);
Однако это делает не включают в себя операционные атрибуты, такие как entryCSN, modifyTimestamp и т.д. конечно, всегда можно указать, какие атрибуты, чтобы получить с помощью массива строк:
Attributes attributes = ctx.getAttributes(entryDN, new String[] {"entryCSN"});
Но тогда только указанные атрибуты возвращаются.
Вещи, которые я попробовал, но не работает для меня:
Получение атрибутов с помощью
ctx.search()
Я знаю, что я могу получить все атрибуты через поиск (см here), но я не хотите, чтобы a) выполнял весь запрос Ldap, если я уже знаю dn и b) для того, чтобы иметь дело с громоздким набором результатов поиска.
Выполнение второго запроса только для операционного атрибута
Конечно, я могу сделать только второй запрос, но я хочу, чтобы сохранить дополнительную поездку и добавить вторые атрибуты первых, как это:
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)
Список всех атрибутов в строке массива
Поскольку записи Ldap вернулся могут быть различные классы объектов и имеют, следовательно, различные атрибуты, я не вижу никакого практического способа сделать это.
Кто-нибудь знает, как получить обычные атрибуты и эксплуатационные атрибуты за одну поездку?