`

一个通过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;
	}
	
	
}



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

相关推荐

    免安装,直接生成thrift代码工具(0.9.1版本)

    描述中的"thrift-0.9.1桌面生成代码工具,免安装版本,可直接生成thrift代码的工具(0.9.1版本)"进一步强调了这个工具的特性,它是一个桌面应用程序,专为生成Thrift代码而设计,并且用户可以轻松下载后立即使用,...

    thrift 生成的java包 全部的

    这个压缩包提供了一个完整的 Thrift Java 开发环境,包括了服务接口定义、实现和运行时所需的所有依赖,使得开发者可以快速搭建和测试基于 Thrift 的 Java 应用。在实际项目中,根据需求选择合适版本的库,并结合...

    thrift代码生成工具和所需jar

    总的来说,Thrift是一个强大的工具,它简化了分布式系统开发中的通信难题,提供了统一的接口定义和代码生成机制,使得开发人员可以专注于业务逻辑,而不是底层通信协议。在你的项目中,通过正确使用这个工具和相关的...

    Thrift-java学习小结

    使用thrift编译器,我们可以将上面的.thrift文件转换为Java、C++等语言的代码。生成的代码包括服务接口、结构体类、协议处理类等,这些代码可以直接在项目中使用。 四、服务端实现 在Java环境中,服务端需要实现...

    thrift 的 java 和 python结合例子

    总结起来,Thrift是实现跨语言服务调用的强大工具,通过其IDL和生成的代码,开发者可以轻松地在Java和Python等不同语言之间建立高效、可靠的通信。这个例子提供了学习和实践Thrift的一个基础起点,对于理解跨语言...

    thrift-generator:使用Java界面生成Thrift文件的工具

    通过Java接口创建Thrift文件 功能列表 支持参数名 支持注释 支持自定义异常 例子 public interface ICommonUserService { public User login ( int id , String name ); public User getUserById ( long id ); ...

    thrift文件生成工具thrift-generator.zip

    thrift-generator 是通过 Java 的接口生成 thrift 文件的工具。例子:public interface ICommonUserService {  public User login(int id, String name);  public User getUserById(long id);  ...

    java代码自动生成.txt数据文件

    Java代码自动生成是一个高效且实用的编程技巧,它可以帮助开发者减少重复劳动,提高代码质量和开发效率。在Java中,可以通过各种方式实现代码自动生成,包括使用模板引擎、元编程技术以及利用第三方库。以下将详细...

    Python库 | thrift_pyi-0.2.0-py3-none-any.whl

    在Python中,Thrift库提供了一组工具和库,包括一个编译器,该编译器将服务接口的定义(通常是一个`.thrift`文件)转换为Python代码。这些生成的Python类和函数使得在服务端实现接口并在客户端调用变得简单。Thrift...

    Java Thrift demo例子

    这将生成一个包含服务接口、数据结构类和必要的辅助类的Java包。执行命令: ``` thrift -gen java ThriftService.thrift ``` 3. 实现服务端: 在生成的Java代码中,找到`ThriftService$Iface`接口,实现你需要...

    thrift实现http协议案例

    这个案例中的“MyThriftWebTest”可能是一个包含整个实现的测试工程,包括Thrift服务的定义、生成的Java代码以及Servlet的实现。通过运行这个测试工程,你可以了解如何将Thrift服务部署到支持HTTP的服务器上,如...

    thrift-编译工具

    Thrift-0.8.0是该框架的一个特定版本,它包含了编译工具和其他相关资源,用于生成不同语言的客户端和服务器端代码。 Thrift的主要组件包括: 1. **IDL(接口定义语言)**:Thrift使用类似C++的语法定义服务接口和...

    Thrift工具和依赖的jar包

    例如,如果使用Java,会生成一个包含服务接口和服务处理类的Java包。服务端需要实现这些接口并启动Thrift服务器,而客户端则可以使用生成的客户端类来调用远程服务。 在部署Thrift服务时,通常需要将Thrift依赖的...

    thrift测试程序

    例如,可能会有一个`Service.thrift`文件,其中定义了一个名为`MyService`的服务,包含若干个远程调用(RPC)方法。 2. 服务端代码:根据IDL文件生成的服务端代码,实现了服务接口。在Java中,这可能是`...

    基于thrift的RPC调用实例

    首先,我们需要创建一个`.thrift`文件,声明服务接口和数据类型。例如: ```thrift service MyService { string sayHello(1: string name) } ``` 在这个例子中,我们定义了一个名为`MyService`的服务,其中有一个...

    使用wireshark抓取thrift协议接口调用

    Thrift文件(.thrift)是接口定义语言(IDL),用于描述服务和数据类型。生成的代码支持多种编程语言,如Java、Python、C++等,使得跨平台通信变得简单。 2. **Wireshark配置** - 安装Wireshark:首先确保你的系统...

    Thrift入门及Java实例演示

    6. **服务启动与调用**:在Java实例中,你需要启动Thrift服务(服务器端),然后在另一个应用程序(客户端)中通过生成的客户端代码调用服务。这涉及到了网络通信和异步/同步调用的概念。 7. **测试**:文件"test...

    Thrift java服务端、php客户端

    在Java服务端,开发者首先会定义一个Thrift IDL(接口定义语言)文件,这个文件中包含了服务的接口和数据结构。例如,可能有一个`Calculator`服务,包含加减乘除等操作。通过Thrift的编译器,这个IDL文件会被转换成...

    Apache Thrift Java实战源码,包含了客户端和服务端源码

    Apache Thrift 是一款...总的来说,Apache Thrift为Java开发者提供了一个强大而灵活的工具,帮助他们构建高效、可扩展的分布式系统。通过这个实战源码,你可以深入理解Thrift的工作原理,并将其应用到自己的项目中。

    php通过thrift获取hadoop资源

    Thrift提供了编译器,可以将服务接口定义(通常是一个.thrift文件)转换为多种编程语言的代码。这个接口定义文件包含了服务的结构、方法以及它们的参数和返回类型。例如,在Hadoop场景中,可能有一个thrift文件定义...

Global site tag (gtag.js) - Google Analytics