如果还没有Spring LDAP 2.0的jar包,可以参考我的上一篇文章,自己编译Spring LDAP的jar包或直接用上篇文章附件中编译好的jar包。http://mwxx.iteye.com/blog/1997282
Spring LDAP支持以注解的方式声明实体类与LDAP节点的关系,并且提供了相关的示例项目。
像下面的Person类就是用注解方式声明的实体,本文中省略了import和get/set方法。
package org.springframework.ldap.samples.plain.domain; import ...; import javax.naming.Name; /** * Simple class representing a single person. * * @author Mattias Hellborg Arthursson * @author Ulrik Sandberg */ @Entry(objectClasses = {"inetOrgPerson", "organizationalPerson", "person", "top"}) public class Person { @Id private Name dn; @Attribute(name = "cn") @DnAttribute(value = "cn", index = 2) private String fullName; @Attribute(name = "sn") private String lastName; @Attribute(name = "description") private String description; @Transient @DnAttribute(value = "c", index = 0) private String country; @Transient @DnAttribute(value = "ou", index = 1) private String company; @Attribute(name = "telephoneNumber") private String phone; getMethod... setMethod... public boolean equals(Object obj) { return EqualsBuilder.reflectionEquals( this, obj); } public int hashCode() { return HashCodeBuilder .reflectionHashCode(this); } public String toString() { return ToStringBuilder.reflectionToString( this, ToStringStyle.MULTI_LINE_STYLE); } }
如果基于LDAP的应用有很多对象类型,并且每个对象类型又含有很多属性,难道就要一个一个的去创建实体类并增加属性和注解吗?
其实Spring LDAP框架已经给我们提供了一种便捷的方法。就是org.springframework.ldap.odm.tools包下的SchemaToJava.java类。
org.springframework.ldap.odm.tools包没有包含到Spring LDAP编译生成的jar包里,笔者是从Spring LDAP的源码中直接拿到自己项目里使用的。
这个包已经上传到附件了,下载解压把org目录复制到项目src下即可。
再把附件中的freemarker-2.3.19.jar以及commons-cli-1.2.jar两个jar包下载下来引用到项目中。
先在D盘创建ldap文件夹。
笔者自己写了一个工具类,配置好参数就可以调用SchemaToJava批量从LDAP反向生成Java实体类。
package com.mwxx.ldap.sample.prepare; import java.util.ArrayList; import java.util.List; import org.springframework.ldap.odm.tools.SchemaToJava; /** * 这个工具可以把LDAP中的各个节点转换成使用Spring-LDAP注解的实体类 * * @author MwXx * @version 1.0 * @date 2013-12-30 13:51:34 */ public class MwXxSchemaToJava { /** LDAP连接地址URL */ private static final String url = "ldap://127.0.0.1:389"; /** LDAP管理用户 */ private static final String username = "cn=Directory Manager"; /** LDAP管理用户的密码 */ private static final String password = "password"; /** 生成类的基础包路径 */ private static final String basePackage = "com.mwxx.ldap.sample.module."; public static void main(String[] args) { List<String[]> list = new ArrayList<String[]>(); // 主帐号 list.add(new String[] { basePackage + "user.vo", "UserVo", "inetOrgPerson,organizationalPerson,person,top" }); // 组织机构 list.add(new String[] { basePackage + "organization.vo", "OrganizationVo", "organization,top" }); // 用户组 list.add(new String[] { basePackage + "group.vo", "GroupVo", "mwxx-group,top" }); String tempDir = "D:\\ldap\\"; for (String[] item : list) { String[] flags = new String[] { // 连接LDAP的URL "--url", url, // LDAP管理用户 "--username", username, // LDAP管理用户的密码 "--password", password, // 需要反向生成实体类的ObjectClass对象类型,多个可以用英文 ","号分割 "--objectclasses", item[2], // 生成的实体类名 "--class", item[1], // 生成的实体类包路径 "--package", item[0], // 反向生成的输出目录 "--outputdir", tempDir }; SchemaToJava.main(flags); } } }
执行完上面的代码后,D:\\ldap\\目录下就有生成的实体类了。
把D:\\ldap\\里的文件复制到项目src里面就可以使用啦!
参考文档:http://docs.spring.io/spring-ldap/docs/2.0.0.CI-SNAPSHOT/apidocs/