如果还没有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/