2

UnboundIDのSDKからこれらの2つの注釈を使用して、LDAPディレクトリにオブジェクトを永続化する基本的な例はありますか?@LDAPSetterメソッドへの引数のタイプまたはメソッドから返された値に関する情報が見つからないようです@LDAPGetter

別の言い方をすれば、次のように入力するにはどうすればよいですか<?>

/**
* Called when creating a Java object from an LDAP entry.
*/
@LDAPSetter(attribute="roleOccupants")
void initMembers(<?> occupants) {
    throw new UnsupportedOperationException();
}

/**
* Called when turning a Java object into an LDAP entry.
*/
@LDAPGetter(attribute="roleOccupants")
<?> storeMembers() {
    throw new UnsupportedOperationException();
}
4

2 に答える 2

3

それは本当に属性の値に依存しroleOccupantsます。@LDAPGetterand@LDAPSetterアノテーションのオプションフィールドの1つは、ですencoderClass。これにより、LDAP属性値とJavaデータ型の間の変換に使用されるオブジェクトエンコーダーを指定できます。カスタムエンコーダーを指定しない場合(ほとんどの場合、指定する必要はありません)、DefaultObjectEncoderクラスを使用して作業を実行し、次のデータ型をサポートします。

  • ブール値
  • バイト[]
  • char []
  • ダブル
  • 浮く
  • int
  • 長さ
  • 短い
  • java.lang.Boolean
  • java.lang.Double
  • java.lang.Float
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Short
  • java.lang.String
  • java.lang.StringBuffer
  • java.lang.StringBuilder
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.net.URI
  • java.net.URL
  • java.util.Date
  • java.util.UUID
  • java.util.concurrent.atomic.AtomicInteger
  • java.util.concurrent.atomic.AtomicLong
  • com.unboundid.ldap.sdk.DN
  • com.unboundid.ldap.sdk.Filter
  • com.unboundid.ldap.sdk.LDAPURL
  • com.unboundid.ldap.sdk.RDN

また、上記のタイプの配列、リスト、セット、および任意の種類の列挙もサポートします。サポートされているデータ型とuの制約の詳細については、 com.unboundid.ldap.sdk.persist.DefaultObjectEncoderクラスのクラスレベルのドキュメントを参照してください。

したがって、実際には、選択するデータ型は、対応するLDAP属性に格納されている情報の種類に上記のどれが最も適切であるかによって異なります。多くの場合、文字列が最も適切な場合がありますが、数値、DN、タイムスタンプなどとして処理する場合もあります。デフォルトのタイプがどれも受け入れられない場合は、独自のカスタムObjectEncoderインスタンスを作成して、必要な変換を実行できます。

于 2011-01-13T21:47:20.560 に答える
2

これは、疑問に思っている他の人の使用例です。を読み取ると、LDAPからユーザーデータが自動的に読み込まれますorganizationalRole

UserRoleクラス:

@LDAPObject(structuralClass="organizationalRole", defaultParentDN="dc=Roles,dc=example,dc=com")
public class UserRole extends LDAPModel implements models.deadbolt.Role {

    @LDAPField(attribute="cn",inRDN=true,filterUsage=FilterUsage.ALWAYS_ALLOWED)
    public String name;

    private List<User> members;

    public List<User> getMembers() {
        return members;
    }

    /**
    * Called when creating a Java object from an LDAP entry.
    */
    @LDAPSetter(attribute="roleOccupant")
    void initMembers(String[] occupants) throws LDAPException {
        members = new ArrayList<User>();

        if (occupants == null || occupants.length == 0)
            return;

        for (String dn : occupants)
            members.add(User.findByDN(dn));

    }

    /**
    * Called when turning a Java object into an LDAP entry.
    */
    @LDAPGetter(attribute="roleOccupant")
    String[] storeMembers() {
        if (members == null)
            return null;

        String[] member_strings = new String[members.size()];
        for (int i = 0; i < members.size(); i++)
            member_strings[i] = members.get(i).getDN();

        return member_strings;
    }

}

Userクラス:

@LDAPObject(structuralClass="inetOrgPerson",
    auxiliaryClass={"mozillaOrgPerson","posixAccount","sambaSamAccount","shadowAccount"},
    defaultParentDN="dc=People,dc=example,dc=com")
public class User extends LDAPModel implements RoleHolder {

    ...

    @LDAPField(attribute="givenName",filterUsage=FilterUsage.ALWAYS_ALLOWED)
    public String fname;

    @LDAPField(attribute="sn",filterUsage=FilterUsage.ALWAYS_ALLOWED)
    public String lname;

    public static User findByDN(String dn) throws LDAPException {
        LDAPConnection conn = ...
        LDAPPersister<User> persister = LDAPPersister.getInstance(User.class);
        return persister.get(dn, conn);
    }
于 2011-01-13T22:56:09.560 に答える