`

一个通过java的接口生成thrift文件的工具

 
阅读更多

 

很早之前写的一个工具,面向的用户主要有两种

1.没接触thrift,但是希望使用thrift的用户,可以便于新用户的理解

2.之前用的是rmi,之后想转成thrift的用户

example

public interface ICommonUserService {

    public User login(int id, String name);

    public User getUserById(long id);

    public boolean saveUser(User user);

    public List<User> getUserIds(long id); 

    public Map<Long, User> getUserByIds(List<User> ids);

    public Map<String, List<User>> getUsersByName(List<String> names);

    public Map<Long, List<Long>> getGroupUsers(List<String> names, List<User> userList, List<Long> lns, long ll);

    public List<String> testCase1(Map<Integer,String> num1, List<User> num2, List<String> num3, long num4, String num5);
}
public class ThriftStructBuilderTest {

    private ThriftFileBuilder fileBuilder = new ThriftFileBuilder();

    @Test
    public void toOutputstream() throws Exception {
        this.fileBuilder.buildToOutputStream(ICommonUserService.class, System.out);
    }

}

执行之后会在控制台输入如下:

    namespace java com.sohu.thrift.generator.test.thrift

    enum Status {
            NORMAL = 0,
            BLOCKED = 1
    }

    struct Account {
            1:i32 id,
            2:string name
    }
    struct User {
            1:i32 id,
            2:string name,
            3:bool sex,
            4:Status status,
            5:list<i64> ids,
            6:Account account
    }

    service ICommonUserService {
            User login(1:i32 arg0,2:string arg1),
            map<string, list<User>> getUsersByName(1:list<string> arg0),
            bool saveUser(1:User arg0),
            map<i64, User> getUserByIds(1:list<User> arg0),
            list<User> getUserIds(1:i64 arg0),
            map<i64, list<i64>> getGroupUsers(1:list<string> arg0,2:list<User> arg1,3:list<i64> arg2,4:i64 arg3),
            User getUserById(1:i64 arg0),
            list<string> testCase1(1:map<i32, string> arg0,2:list<User> arg1,3:list<string> arg2,4:i64 arg3,5:string arg4)
    }

 项目地址: https://github.com/hongliuliao/thrift-generator

0
0
分享到:
评论
1 楼 topinking 2015-04-12  
工具很不错

我手头有个case,报了NullPointException

java.lang.NullPointerException
	at com.sohu.thrift.generator.builder.ThriftStructBuilder.buildThriftStruct(ThriftStructBuilder.java:19)
	at com.sohu.thrift.generator.builder.ThriftStructBuilder.buildStrutsByGeneric(ThriftStructBuilder.java:47)
	at com.sohu.thrift.generator.builder.ThriftFieldBuilder.buildThriftField(ThriftFieldBuilder.java:25)
	at com.sohu.thrift.generator.builder.ThriftStructBuilder.buildThriftStruct(ThriftStructBuilder.java:24)
	at com.sohu.thrift.generator.builder.ThriftServiceBuilder.getAllStruct(ThriftServiceBuilder.java:93)
	at com.sohu.thrift.generator.builder.ThriftServiceBuilder.buildThriftService(ThriftServiceBuilder.java:50)
	at com.sohu.thrift.generator.builder.ThriftFileBuilder.buildToOutputStream(ThriftFileBuilder.java:42)
	at DemoGenerator.main(DemoGenerator.java:19)


我的Service定义如下
public interface IGroupMemberQueryService {

	
//	/** 获取群成员基本信息
//	 * @param groupId
//	 * @param fromId	
//	 * 	
//	 * @return
//	 * 	如果没有该成员,返回空
//	 */
//	public GroupMemberResult getGroupMemberById(long groupId, long id, long fromId);
	
	/**获取某个用户某个群的群成员清单(所有)
	 * @param fromId
	 * @param groupId
	 * @return
	 * 	如果没有该群,返回空
	 */
	public GroupMemberListResult getAllGroupMembers(long fromId, long groupId);
	
	
}


实体定义如下:
public class GroupMemberListResult {

	private int err_code;
	private String err_msg;
	private List<GroupMember> groupMemeberList;

	public int getErr_code() {
		return err_code;
	}

	public void setErr_code(int err_code) {
		this.err_code = err_code;
	}

	public String getErr_msg() {
		return err_msg;
	}

	public void setErr_msg(String err_msg) {
		this.err_msg = err_msg;
	}

	public List<GroupMember> getGroupMemeberList() {
		return groupMemeberList;
	}

	public void setGroupMemeberList(List<GroupMember> groupMemeberList) {
		this.groupMemeberList = groupMemeberList;
	}


}


public class GroupMember {
	
	/**
	 * id
	 */
	private long id;
	/**
	 * 用户id
	 */
	private long userId;
	/**
	 * 备注名称
	 */
	private String remarkName;
	/**
	 * 群组id
	 */
	private long groupId;
	/**
	 * 用户类型
	 */
	private int type;
	/**
	 * 用户加入时间
	 */
	private long joinTime;
	/**
	 * 群是否锁定
	 */
	private int isLock;
	/**
	 * 群锁定时间
	 */
	private long lockDate;
	public long getId() {
		return id;
	}
	public void setId(long id) {
		this.id = id;
	}
	public long getUserId() {
		return userId;
	}
	public void setUserId(long userId) {
		this.userId = userId;
	}
	public String getRemarkName() {
		return remarkName;
	}
	public void setRemarkName(String remarkName) {
		this.remarkName = remarkName;
	}
	public long getGroupId() {
		return groupId;
	}
	public void setGroupId(long groupId) {
		this.groupId = groupId;
	}
	public int getType() {
		return type;
	}
	public void setType(int type) {
		this.type = type;
	}
	public long getJoinTime() {
		return joinTime;
	}
	public void setJoinTime(long joinTime) {
		this.joinTime = joinTime;
	}
	public int getIsLock() {
		return isLock;
	}
	public void setIsLock(int isLock) {
		this.isLock = isLock;
	}
	public long getLockDate() {
		return lockDate;
	}
	public void setLockDate(long lockDate) {
		this.lockDate = lockDate;
	}
	
	
}



还请麻烦看下有没有办法改进,谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics