T decode(final Entry e) throws LDAPPersistException {
    final T o;
    try {
      o = constructor.newInstance();
    } catch (Throwable t) {
      debugException(t);

      if (t instanceof InvocationTargetException) {
        t = ((InvocationTargetException) t).getTargetException();
      }

      throw new LDAPPersistException(
          ERR_OBJECT_HANDLER_ERROR_INVOKING_CONSTRUCTOR.get(type.getName(), getExceptionMessage(t)),
          t);
    }

    decode(o, e);
    return o;
  }