Spring LDAP框架 从LDAP反向生成实体类SchemaToJava

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

猜你喜欢

转载自mwxx.iteye.com/blog/1997305