Reputation: 11
We are using LDAP with Spring, and the below code is yielding results < 1500 easily, but for more than 1500, its throwing an exception.
IncrementalAttributesMapper incrementalAttributeMapper =
new DefaultIncrementalAttributesMapper(new String[]{"member"});
IncrementalAttributesMapper incrementalAttributeMapper = new
DefaultIncrementalAttributesMapper(new String[]{"member"});
while (incrementalAttributeMapper.hasMore()) {
ldapTemplate.search(query().where("CN").is(unit),incrementalAttributeMapper);
List values = incrementalAttributeMapper.getValues("member");
System.out.println("inside getUserDetailsForOuc tester if memberValues "+
memberValues);
}
Error:
java.lang.IllegalStateException: Ranges cannot be compared, range-initial not the same: Range=1500-* vs Range=0-1499
at org.springframework.ldap.core.support.RangeOption.compareTo(RangeOption.java:131)
at org.springframework.ldap.core.support.DefaultIncrementalAttributesMapper$DefaultIncrementalAttributeState.calculateNextRange(DefaultIncrementalAttributesMapper.java:378)
at org.springframework.ldap.core.support.DefaultIncrementalAttributesMapper.mapFromAttributes(DefaultIncrementalAttributesMapper.java:188)
at org.springframework.ldap.core.support.DefaultIncrementalAttributesMapper.mapFromAttributes(DefaultIncrementalAttributesMapper.java:73)
at org.springframework.ldap.core.AttributesMapperCallbackHandler.getObjectFromNameClassPair(AttributesMapperCallbackHandler.java:62)
at org.springframework.ldap.core.CollectingNameClassPairCallbackHandler.handleNameClassPair(CollectingNameClassPairCallbackHandler.java:50)
Upvotes: 1
Views: 592
Reputation: 3913
You probably have to use paging:
PagedResultsDirContextProcessor processor = new PagedResultsDirContextProcessor(20, cookie);
EqualsFilter equalsFilter = new EqualsFilter("objectClass","inetOrgPerson");
List<String> lastNames = ldapTemplate.search("", equalsFilter.encode(), searchControls, new LastNameMapper(), processor);
Upvotes: 1