Please take a look at the test class below. I am trying to do an LDAP search with Spring LDAP Template. I am able to search and produce a list of entries corresponding to the search criteria without the Spring LDAP template by using the DirContext as shown in the method searchWithoutTemplate(). But when I use a LdapTemplate, I end up with a NPE as shown further below. I am sure I must be missing something. Can someone help please?
Exception is:Code:import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.Attribute; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import javax.naming.ldap.LdapName; import org.springframework.ldap.core.AttributesMapper; import org.springframework.ldap.core.LdapTemplate; import org.springframework.ldap.core.support.DefaultDirObjectFactory; import org.springframework.ldap.core.support.LdapContextSource; public class LDAPSearchTest { //bind params static String url="ldap://<IP>:<PORT>"; static String userName="cn=Directory Manager"; static String password="password123"; static String bindDN="dc=XXX,dc=com"; //search params static String base = "ou=StandardUser,ou=XXXCustomers,ou=People,dc=XXX,dc=com"; static String filter = "(objectClass=*)"; static String[] attributeFilter = { "cn", "uid" }; static SearchControls sc = new SearchControls(); public static void main(String[] args) throws Exception { // sc.setSearchScope(SearchControls.SUBTREE_SCOPE); sc.setReturningAttributes(attributeFilter); searchWithTemplate(); //NPE //searchWithoutTemplate(); //works fine } public static void searchWithTemplate() throws Exception { DefaultDirObjectFactory factory = new DefaultDirObjectFactory(); LdapContextSource cs = new LdapContextSource(); cs.setUrl(url); cs.setUserDn(userName); cs.setPassword(password); cs.setBase(bindDN); cs.setDirObjectFactory(factory.getClass ()); LdapTemplate template = new LdapTemplate(cs); template.afterPropertiesSet(); System.out.println((template.search(new LdapName(base), filter, sc, new AttributesMapper() { public Object mapFromAttributes(Attributes attrs) throws NamingException { System.out.println(attrs); return attrs.get("uid").get(); } }))); } public static void searchWithoutTemplate() throws NamingException{ Hashtable env = new Hashtable(11); env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, url); //env.put(Context.SECURITY_AUTHENTICATION, "simple"); env.put(Context.SECURITY_PRINCIPAL, userName); env.put(Context.SECURITY_CREDENTIALS, password); DirContext dctx = new InitialDirContext(env); NamingEnumeration results = dctx.search(base, filter, sc); while (results.hasMore()) { SearchResult sr = (SearchResult) results.next(); Attributes attrs = sr.getAttributes(); System.out.println(attrs); Attribute attr = attrs.get("uid"); } dctx.close(); } }
I am using Spring 2.5.6 and Spring LDAP 1.3.0Code:Exception in thread "main" java.lang.NullPointerException at org.springframework.ldap.core.support.AbstractContextSource.getReadOnlyContext(AbstractContextSource.java:125) at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:287) at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:237) at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:588) at org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:546) at LDAPSearchTest.searchWithTemplate(LDAPSearchTest.java:47) at LDAPSearchTest.main(LDAPSearchTest.java:33)


Reply With Quote
