docs: @Override
      public <T> T findByDn(Name dn, final Class<T> clazz) {
          if (LOG.isDebugEnabled()) {
              LOG.debug(String.format("Reading Entry at - %s$1", dn));
          }
  
          // Make sure the class is OK before doing the lookup
          String[] attributes = odm.manageClass(clazz);
  
          T result = lookup(dn, attributes, new ContextMapper<T>() {
              @Override
              public T mapFromContext(Object ctx) throws javax.naming.NamingException {
                  return odm.mapFromLdapDataEntry((DirContextOperations) ctx, clazz);
              }
          });
  
          if (result == null) {
              throw new OdmException(String.format("Entry %1$s does not have the required objectclasses ", dn));
          }
          if (LOG.isDebugEnabled()) {
              LOG.debug(String.format("Found entry - %s$1", result));
          }
  
          return result;
      }