Listing 3: ReadMulti.java — Reads a multi-valued attribute

package jndisamples;

import java.util.Hashtable;
import javax.naming.*;
import javax.naming.directory.*;

public class ReadMulti {
  public static void main(String[] args){
    try{
      InitialDirContext root = 
        login("127.0.0.1",
              "cn=mseaver,ou=HR,o=SLC",
              "password");

      // Read SN and givenName Attributes of cn=mseaver,ou=HR,o=SLC
      DirContext ctx = 
       (DirContext)root.lookup("cn=mseaver,ou=HR,o=SLC");
      String[] ids = {"sn", "givenName"};
      Attributes attrs = ctx.getAttributes("", ids);

      NamingEnumeration enum = attrs.getAll();
      while(enum.hasMore()){
        Attribute attr = (Attribute)enum.next();
        System.out.print(attr.getID() + ": ");

        NamingEnumeration values = attr.getAll();
        while(values.hasMore()){
          System.out.print("'" + (String)values.next() + "' ");
        }
        System.out.println();
      }
      root.close();
    }catch(NamingException ex){
      System.out.println("Error: " + ex);
    }
  }

  private static InitialDirContext
  login(String ipaddr, String user, String password)
      throws NamingException{
    Hashtable environment = new Hashtable();
    environment.put(Context.INITIAL_CONTEXT_FACTORY,      
                    "com.sun.jndi.ldap.LdapCtxFactory");
    environment.put(Context.PROVIDER_URL,
                    "ldap://" + ipaddr + ":389");
    environment.put(Context.SECURITY_PRINCIPAL, user);
    environment.put(Context.SECURITY_CREDENTIALS, password);
    environment.put(Context.SECURITY_AUTHENTICATION, "simple");

    InitialDirContext root = new InitialDirContext(environment);
    System.out.println("Successfully Logged-In");

    return root;
  }
}

/* Output:
Successfully Logged-In
givenName: 'Michael' 'James'
sn: 'Seaver'
*/
— End of Listing —