2008-11-27 2 views
1

J'ai implémenté une fabrique d'objets pour rechercher des objets LDAP, mais le contexte fourni ne retourne pas le DN (via nameCtx.getNameInNamespace()) du LDAP. Est-ce que je le fais mal d'une certaine façon?Utilisation de javax.naming.spi.DirObjectFactory pour rechercher des objets à partir d'un LDAP

public class LdapPersonFactory implements DirObjectFactory { 
     @Override 
     public Object getObjectInstance(Object obj, Name name, Context nameCtx, 
       Hashtable<?, ?> environment, Attributes attrs) throws Exception { 
      if (attrs == null) 
       return null; 
      Attribute oc = attrs.get("objectclass"); 
      if (oc != null && oc.contains("inetOrgPerson")) { 
       String surname = (String) attrs.get("sn").get(); 
       String givenName = (String) attrs.get("givenname").get(); 
       String dn = nameCtx.getNameInNamespace(); 
       return new LdapPerson(dn, givenName, surname); 
      } 
      return null; 
     } 
    } 

nomCtx.getNameInNamespace() renvoie uniquement une chaîne vide.

Répondre

0

Peut-être que?

String dn = (String) attrs.get("dn").get(); 

Ce devrait être un attribut comme un autre?

1
String dn = (String) attrs.get("dn").get(); 

cela génère uniquement NamingException.
Je ne pense pas que le nom distinctif (DN) soit un attribut de l'objet LDAP, c'est plus comme une clé d'identité dans le monde LDAP.

0

Il se peut que votre contexte pointe vers le "nœud racine" ou quel que soit son nom. C'est-à-dire, le noeud qui a les espaces de noms de niveau supérieur comme ses enfants. Je suppose que cela pourrait aussi être que le contexte n'est pas lié au moment où vous appelez getNameInNamespace, bien que je m'attendrais à ce qu'il lève une exception.

J'utilise spring-ldap pour ce genre de choses, et je n'ai pas rencontré de bogue similaire avec ses classes DirContextAdapter et LdapTemplate. Mais encore une fois, je les lie toujours à un espace de noms spécifique.

Questions connexes