directory-api mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Emmanuel Lécharny <elecha...@gmail.com>
Subject Re: Proper use of LdapConnectionPool
Date Mon, 02 Feb 2015 22:21:51 GMT
Le 02/02/15 21:28, Harris, Christopher P a écrit :
> Hi, Emmanuel.
>
> Do you have any updates on this issue?

Sorry, was busy the last few days...

Here are my findings :

Basically, it works. I have used a slightly different version of the code :

    public void searchLdapUsingHybridApproach()
    {
        SearchCursor cursor = new SearchCursorImpl( null, 30000,
TimeUnit.SECONDS );
        Entry entry = null;

        try
        {
            SearchRequest sr = new SearchRequestImpl();
            sr.setBase( new Dn( "ou=system" ) );
            sr.setFilter( "(ObjectClass=*)" );
            sr.setScope( SearchScope.SUBTREE );
            cursor = connection.search( sr );
            Response response;

            while ( cursor.next() && cursor.isEntry() )
            {
                response = cursor.get();
                System.out.println( ( ( SearchResultEntry ) response
).getEntry() );
                entry = cursor.getEntry();
            }
        }
        catch ( LdapException ex )
        {
            ex.printStackTrace();
        }
        catch ( CursorException ex )
        {
            ex.printStackTrace();
        }
        finally
        {
            cursor.close();
            try
            {
                connection.close();
            }
            catch ( IOException ex )
            {
                ex.printStackTrace();
            }
        }
    }

just to check that ther API returns the correct entries in the various
cases (OBJECT, ONELEVEL and SUBTREE). It does.

So now, here is my hypothesys : there is a bug in the EntryMapper.

When I run the code using the EntryMapper, I get a NPE because the
EntryMapper tries to do that :

                public Person map( Entry entry ) throws LdapException
                {
                    try
                    {
                        return new Person.Builder()
                            .setDistinguishedName( entry.getDn().getName() )
                            .setFirstName( entry.get( "givenName"
).getString() )   <---- NPE here because I have no givenName in the
entry I'm reading
                            .setLastName( entry.get( "sn" ).getString() )
                            .setTitle( entry.get( "title" ).getString() )
                            .setDepartment( entry.get( "department"
).getString() )
                            .setDivision( entry.get(
"extensionAttribute14" ).getString() )
                            .setCity( entry.get( "l" ).getString() )
                            .setCountry( entry.get( "co" ).getString() )
                            .setEmail( ( entry.get( "mail" ) != null ) ?
entry.get( "mail" ).getString() : "" )
                            .setDeskLocation( entry.get( "postOfficeBox"
).getString() )
                            .setOfficePhone(
                                ( entry.get( "telephoneNumber" ) != null
) ? entry.get( "telephoneNumber" ).getString()
                                    : "" )
                            .setDirectReports( entry.get(
"directreports" ) )
                            .build();

So my guess is that in your case your entry is missing some of the
expected attribute, and this is why you get no result.

Can you chack that by printing the entry just hafter having pulled it
from the LDAP server ?

Thanks !



Mime
View raw message