Printemps LDAP le Modèle d'Utilisation

Veuillez jeter un oeil à la classe de test ci-dessous. Je suis en train de faire une recherche LDAP avec le Printemps LDAP Modèle. Je suis en mesure de rechercher et de produire une liste d'entrées correspondant aux critères de recherche, sans le Printemps LDAP modèle en utilisant l'DirContext comme indiqué dans la méthode searchWithoutTemplate(). Mais lorsque j'utilise un LdapTemplate, je me retrouve avec un NPE, comme illustré ci-dessous. Je suis sûr que quelque chose doit m'échapper. Quelqu'un peut-il aider s'il vous plaît?

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();
    }
}

Exception est la suivante:

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)

Je suis à l'aide de Printemps 2.5.6 et le Printemps LDAP 1.3.0

OriginalL'auteur psuryan | 2011-09-30