Value Transcoders

In cases where LDAP attribute values represent concrete Java objects, a ValueTranscoder can be used to convert those types. The ValueTranscoder interface looks like:

public interface ValueTranscoder<T>
{
  T decodeStringValue(String value);

  T decodeBinaryValue(byte[] value);

  String encodeStringValue(T value);

  byte[] encodeBinaryValue(T value);

  Class<T> getType();
}

Ldaptive provides the following value transcoder implementations:

CertificateValueTranscoder

Provides the ability to read a PEM encoded certificate from an LDAP attribute in order to create a java.security.cert.Certificate object. Conversely, a java.security.cert.Certificate can also be written to the directory as a PEM encoded certificate.

Connection conn = DefaultConnectionFactory.getConnection("ldap://directory.ldaptive.org");
try {
  conn.open();
  SearchOperation search = new SearchOperation(conn);
  SearchResult result = search.execute(
    new SearchRequest(
      "dc=ldaptive,dc=org","(&(givenName=daniel)(sn=fisher))", "userCertificate;binary")).getResult();
  LdapEntry entry = result.getEntry();
  Certificate cert = entry.getAttribute("userCertificate;binary").getValue(new CertificateValueTranscoder());

} finally {
  conn.close();
}

GeneralizedTimeValueTranscoder

Provides the ability to read a generalized time from an LDAP attribute in order to create a java.util.Calendar (or ZonedDateTime in v1.2) object. Conversely, a java.util.Calendar can also be written to the directory in generalized time format.

Connection conn = DefaultConnectionFactory.getConnection("ldap://directory.ldaptive.org");
try {
  conn.open();
  SearchOperation search = new SearchOperation(conn);
  SearchResult result = search.execute(
    new SearchRequest(
      "dc=ldaptive,dc=org","(&(givenName=daniel)(sn=fisher))", "modifyTimestamp")).getResult();
  LdapEntry entry = result.getEntry();
  ZonedDateTime modifyTimestamp = entry.getAttribute("modifyTimestamp").getValue(new GeneralizedTimeValueTranscoder());

} finally {
  conn.close();
}