Getting all users from TDS LDAP including image

357 views Asked by At

I am using below code to retrieve all users from TDS LDAP using Java API. But when I include image in return attributes, the query doesn't work. Please help me fix it.

String returnedAtts[] = {"jpegPhoto","cn","uid","UserAccountStatus"};

When i include attribute "jpegPhoto", i am getting empty results.

but without attribute "jpegPhoto" like below, am getting all users data.i need images of all users also so query (cn=*) not working with image attribute.

String returnedAtts[] = {"uid","cn","UserAccountStatus"};



try {
        // Create the initial directory context
        DirContext ctx = new InitialLdapContext(env,null);
        //Create the search controls   
        SearchControls searchCtls = new SearchControls();
        //Specify the attributes to return
        String returnedAtts[]={"jpegPhoto","DateofBirth","DateofJoining","cn","sn","UserAccountStatus","uid"};
                //String returnedAtts[]={"DateofBirth","DateofJoining","cn","sn","UserAccountStatus","uid"};
        searchCtls.setReturningAttributes(returnedAtts);
        //Specify the search scope
        searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

                String searchBase = "cn=parleRealm,o=parle";

        int totalResults = 0;
        // Search for objects using the filter
        NamingEnumeration answer = ctx.search(searchBase, "(&(objectClass=inetOrgPerson)(cn=*))", searchCtls);

                while (answer.hasMoreElements()) {

                SearchResult sr = (SearchResult)answer.next();
                totalResults++;

                // Print out some of the attributes, catch the exception if the attributes have no values
                Attributes attrs = (Attributes) sr.getAttributes();
                if (attrs != null) {
                    try {
                        if("Active".equals(attrs.get("UserAccountStatus").get().toString())){

                        /*   
                        ub=new UserBean();
                        ub.setUid((String)attrs.get("uid").get());
                        ub.setCn((String)attrs.get("cn").get());
                        ub.setSn((String)attrs.get("sn").get());
                        ub.setDateOfBirth((String)attrs.get("DateofBirth").get());
                        ub.setDateofJoining((String)attrs.get("DateofJoining").get());
                        list.add(ub);*/


                      System.out.println(attrs.get("cn").get());      
                    }
                    }
                catch (Exception e) {
                      System.out.println(attrs.get("uid").get()+"is failed to read");
                    }
                }
            }
1

There are 1 answers

0
Ravisankar Vandanapu On

I am getting below error while fetching all users data from TDS ldap using java api.

javax.naming.CommunicationException: array index out of bounds [Root exception is com.sun.jndi.ldap.Ber$DecodeException: array index out of bounds]; remaining name 'cn=parleRealm,o=parle'
javax.naming.CommunicationException: array index out of bounds [Root exception is com.sun.jndi.ldap.Ber$DecodeException: array index out of bounds]; remaining name 'cn=parleRealm,o=parle' at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:2003)
    at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1847)
    at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1772)
    at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:386)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:356)
    at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:339)
    at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:267)
    at com.parle.Test.getUsers(Test.java:60)
    at com.parle.Test.main(Test.java:112)
Caused by: com.sun.jndi.ldap.Ber$DecodeException: array index out of bounds
    at com.sun.jndi.ldap.BerDecoder.seek(BerDecoder.java:127)
    at com.sun.jndi.ldap.LdapClient.parseAttribute(LdapClient.java:726)
    at com.sun.jndi.ldap.LdapClient.getSearchReply(LdapClient.java:660)
    at com.sun.jndi.ldap.LdapClient.search(LdapClient.java:562)
    at com.sun.jndi.ldap.LdapCtx.doSearch(LdapCtx.java:1985)
    ... 8 more

My code is

try {
        // Create the initial directory context
        DirContext ctx = new InitialLdapContext(env,null);
        //Create the search controls   
        SearchControls searchCtls = new SearchControls();
        //Specify the attributes to return
        String returnedAtts[]={"jpegPhoto","cn","sn","UserAccountStatus","uid"};
                //String returnedAtts[]={"jpegPhoto","DateofBirth","DateofJoining","cn","sn","UserAccountStatus","uid"};
        searchCtls.setReturningAttributes(returnedAtts);
        //Specify the search scope
        searchCtls.setSearchScope(SearchControls.SUBTREE_SCOPE);

                String searchBase = "cn=parleRealm,o=parle";

        int totalResults = 0;
        // Search for objects using the filter
        NamingEnumeration answer = ctx.search(searchBase, "(&(objectClass=inetOrgPerson)(cn=r*))", searchCtls);

                while (answer.hasMoreElements()) {

                SearchResult sr = (SearchResult)answer.next();
                totalResults++;

                // Print out some of the attributes, catch the exception if the attributes have no values
                Attributes attrs = (Attributes) sr.getAttributes();
                if (attrs != null) {
                    try {
                        if("Active".equals(attrs.get("UserAccountStatus").get().toString())){

                        /*   
                        ub=new UserBean();
                        ub.setUid((String)attrs.get("uid").get());
                        ub.setCn((String)attrs.get("cn").get());
                        ub.setSn((String)attrs.get("sn").get());
                        ub.setDateOfBirth((String)attrs.get("DateofBirth").get());
                        ub.setDateofJoining((String)attrs.get("DateofJoining").get());
                        list.add(ub);*/


                      System.out.println(attrs.get("jpegPhoto").get() + ">>> cn >> " + attrs.get("cn").get());      
                    }
                    }
                catch (Exception e) {
                      System.out.println(e);
                     // System.out.println(attrs.get("uid").get()+"is failed to read");
                    }
                }
            }

but i am getting all users data if i remove "jpegPhoto" return attributes.