我正在迁移管理OpenLDAP对象的LDAP客户端应用程序。此应用程序是用Java编写的,目前使用的是spring ldap 1.3。 我目前(70%)正在迁移到spring ldap 2.0.2,我对这个新版本非常满意。
我已经创建了我们的对象并使用了注释(@Entry ...)并且它有效。
现在这是我的问题:
这是我的代码:
@Entry(objectClasses={"organizationalUnit", "top"}, base="ou=units")
public class Unit {
@Id
private Name dn;
@Attribute(name="ou")
@DnAttribute(value="ou", index=1)
private String rdn;
}
但此代码仅适用于第一级单位! 我发现以下question和@marthursson建议编写自己的ObjectDirectoryMapper。这是唯一的解决方案吗?
编辑1:你的意思是,像:
@Entry(objectClasses={"organizationalUnit", "top"}, base="ou=units")
public class Unit {
@Id
private Name dn;
@Attribute(name="ou")
@DnAttribute(value="ou", index=1)
private String rdn;
@Attribute(name="ou")
@DnAttribute(value="ou", index=2)
private String lvl2;
@Attribute(name="ou")
@DnAttribute(value="ou", index=3)
private String lvl3;
@Attribute(name="ou")
@DnAttribute(value="ou", index=4)
private String lvl4;
}
如果没有值放在索引2,我会得到一个IndexOutofBoundException。通常情况下,当我在ou = units下加载根单元时。
编辑2:以下功能完成工作:
public String getRdn() {
LdapName n = LdapNameBuilder.newInstance(dn.getSuffix(dn.size()-1)).build();
return n.getRdn(0).getValue().toString();
}