IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[JNDI][LDAP] Suppression valeur d'un attribut


Sujet :

API standards et tierces Java

  1. #1
    Invité
    Invité(e)
    Par défaut [JNDI][LDAP] Suppression valeur d'un attribut
    Bonjour,

    Je fais des mises à jour sur l'annuaire Active directory via une appli java. Pour l'instant tout fonctionne sauf lorsque je souhaites supprimer la valeur (vider le champs) d'un attribut d'un compte déjà existant.

    Voila mon bout de code :

    Si la valeur que je veux envoyer dans mon attribut est nulle ou chaine vide, alors je fais un REMOVE_ATTRIBUTE sinon je fais un REPLACE_ATTRIBUTE. Dans la variable "attribut" j'ai le nom de l'attribut.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if ((valeur == null) || (String.valueOf(valeur).trim().equals(""))) {			
        mods[0] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute(attribut));
    }												
    else					
        mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute(attribut, valeur.toString()));
     
    _ctx.modifyAttributes(distinguishedName, mods);
    Lorsque j'arrive dans le cas ou valeur est null ou vaut chaine vide ca me retourne le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     javax.naming.directory.NoSuchAttributeException: [LDAP: error code 16 - 00002076: AtrErr: DSID-030F1145, #1: 0: 00002076: DSID-030F1145, problem 1001 (NO_ATTRIBUTE_OR_VAL), data 0, Att 15002a (pager)
    Code 16 signifiant :
    LDAP_NO_SUCH_ATTRIBUTE: Indicates that the attribute specified in the modify or compare operation does not exist in the entry.
    Par contre si je fais REPLACE_ATTRIBUTE dans le cas ou "valeur" est null ou chaine vide j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     javax.naming.directory.InvalidAttributeValueException: [LDAP: error code 21 - 00000057: LdapErr: DSID-0C090A85, comment: Error in attribute conversion operation, data 0, vece
    Code 21 signifiant :

    LDAP_INVALID_SYNTAX: Indicates that the attribute value specified in an add, compare, or modify operation is an unrecognized or invalid syntax for the attribute.
    Je ne comprends pas ce qui cloche, surtout que mon code fonctionne lorsque la valeur à remplacer n'est pas nulle ou contient des caractères.

    Si vous connaissez le problème et/ou que vous avez un bout de code qui pourrait me servir d'exemple je suis prenneur !

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon heu j'ai pas vraiment trouvé de solution mais plutot une astuce : je met une chaine avec un esapce " " dans le champs et là ca passe... Si je met une chaine vide ca ne passe pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if ((valeur == null) || (String.valueOf(valeur).trim().equals(""))) {			
      mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute(attribut," "));
    }												
    else									
      mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute(attribut, valeur));
    }
     
    String distinguishedName = composeDN(compteAD.getDn());				
    _ctx.modifyAttributes(distinguishedName, mods);
    Si toutefois vous avez une solution plus "propre" je suis prenneur.

  3. #3
    Invité
    Invité(e)
    Par défaut
    J'ai fini par trouver trouver. Il faut le faire en deux fois :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    mods = new ModificationItem[1];
     
    if ((valeur == null) || (String.valueOf(valeur).equals(""))) {
       BasicAttribute battr = new BasicAttribute(attribut,false);
       battr.add(null);						
       mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,battr);
    }												
    else									
       mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute(attribut, valeur));

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [LDAP] probleme récupération de valeur d'un attribut
    Par bikette63 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 24/11/2006, 13h55
  2. [XSD] test de la valeur d'un attribut
    Par ka0z dans le forum Valider
    Réponses: 3
    Dernier message: 21/08/2005, 20h46
  3. Réponses: 2
    Dernier message: 07/07/2005, 18h11
  4. Valeur d'un attribut
    Par DarkMoox dans le forum Requêtes
    Réponses: 5
    Dernier message: 10/10/2004, 18h31
  5. [JNDI] [LDAP] [DirContext] [LdapContext] DN / introspection
    Par wazup dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 09/04/2004, 15h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo