LDAP has been edited by Hadrian Zbarcea (Aug 27, 2008).

(View changes)

Content:

LDAP Component

The ldap: component allows you to perform searches in LDAP servers using filters as the message payload.
This component uses standard JNDI (javax.naming) to access the server.

URI format

ldap:ldapServerUrl?options

This component only supports producer, meaning that you can not use routes with this component in the from type.


Options

Name Default Value Description
base ou=system The base DN for searches
scope subtree Search the whole subtree. Value must be one of: "object", "onelevel" or "subtree"

Result

The result is returned in the out body as a ArrayList<javax.naming.directory.SearchResult> list object with the result.

Samples

In the sample below we fetches the rows from the customer table.

First we register our datasource in the Camel registry as testdb:

JndiRegistry reg = super.createRegistry();
reg.bind("localhost:" + port, this.getWiredContext());
return reg;

Then we configure a route that routes to the LDAP component so the search will be executed, notice that we refer to the LdapContext that was bound in the previous step:

public void configure() throws Exception {
    from("direct:start").to("ldap:localhost:" + port + "?base=ou=system");
}

And then we create the endpoint and sends the exchange containing the LDAP filter to execute in the in body. The result is returned in the out body.

Endpoint endpoint = context.getEndpoint("direct:start");
        Exchange exchange = endpoint.createExchange();
        // then we set the SQL on the in body
        exchange.getIn().setBody("(!(ou=test1))");

        // now we send the exchange to the endpoint, and receives the response from Camel
        Exchange out = template.send(endpoint, exchange);

        // assertions of the response
        assertNotNull(out);
        assertNotNull(out.getOut());
        Collection<SearchResult> data = ""
        assertNotNull("out body could not be converted to a Collection - was: " + out.getOut().getBody(), data);
        
        assertFalse(contains("uid=test1,ou=test,ou=system", data));
        assertTrue(contains("uid=test2,ou=test,ou=system", data));
        assertTrue(contains("uid=testNoOU,ou=test,ou=system", data));
        assertTrue(contains("uid=tcruise,ou=actors,ou=system", data));
    }

    @Override
    protected JndiRegistry createRegistry() throws Exception {
        JndiRegistry reg = super.createRegistry();
        reg.bind("localhost:" + port, this.getWiredContext());
        return reg;
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() throws Exception {
                from("direct:start").to("ldap:localhost:" + port + "?base=ou=system");
            }
        };
    }
}

Sample - Polling the server every minute

If we want to poll an LDAP server using this component we need to combine this with a polling scheduler such as the Timer or Quartz etc.
In this sample we retrieve data every 60th seconds.

from("timer://foo?period=60000").setBody(constant("(o=apache)")).to("ldap:localhost:1024").to("activemq:queue:committers");

See Also

Reply via email to