IDL文件生成的Java类浅析-方法部分
程序员文章站
2022-06-26 08:03:01
...
IDL文件生成的Java类浅析-方法参数部分(m_args)
IDL文件生成的Java类浅析-方法返回值部分(命名格式:methodName_result)
thrift接口方法的实现都有同步和异步之分,异步的部分会在另一篇博文中展开来再说。
对于service的定义的方法来说,一般会生成两个接口,即Iface和AsyncIface,一个同步一个异步。接口中的方法自然就是IDL文件中定义的方法。
Iface:
public interface Iface {
public java.lang.String echo(java.lang.String str) throws org.apache.thrift.TException;
}
对应的也有两个Client,即Client和AsyncClient。
processor负责具体接口中方法的调用,有同步和异步之分,异步的部分会在另一篇博文中展开来再说。
public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
private static final org.slf4j.Logger _LOGGER = org.slf4j.LoggerFactory.getLogger(Processor.class.getName());
public Processor(I iface) {
super(iface, getProcessMap(new java.util.HashMap<java.lang.String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
}
protected Processor(I iface, java.util.Map<java.lang.String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
super(iface, getProcessMap(processMap));
}
/*service中的每一个方法都会被封装成一个ProcessFunction,被processor直接调用*/
//将方法名放入processMap中
private static <I extends Iface> java.util.Map<java.lang.String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> getProcessMap(java.util.Map<java.lang.String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>> processMap) {
processMap.put("echo", new echo());
return processMap;
}
public static class echo<I extends Iface> extends org.apache.thrift.ProcessFunction<I, echo_args> {
public echo() {
super("echo");
}
public echo_args getEmptyArgsInstance() {
return new echo_args();
}
//这是一个Call类型的方法,由客户端调用并希望返回结果
protected boolean isOneway() {
return false;
}
//一般的方法不会把异常往外抛
@Override
protected boolean rethrowUnhandledExceptions() {
return false;
}
//调用实现类的对应的方法并返回结果
//iface是实现了idl中接口方法的类对象
public echo_result getResult(I iface, echo_args args) throws org.apache.thrift.TException {
//echo_result是thrift根据方法返回值生成的Java类,主要负责
//返回值的序列化与反序列化,该博文最上方有相关分析的链接
echo_result result = new echo_result();
result.success = iface.echo(args.str);
return result;
}
}
上一篇: Ubuntu 安装 Visual Studio Code
下一篇: python语法部分
推荐阅读
-
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
-
Android studio怎么创建文件? Android studio新建Java类文件的方法
-
php生成HTML文件的类方法
-
利用weixin-java-miniapp生成小程序码并直接返回图片文件流的方法
-
Java利用exe4j工具生成exe文件实例演示,IntelliJ IDEA将项目转化为jar包方法,运行生成后的程序弹出exe4j提示处理
-
php实现生成PDF文件的方法示例【基于FPDF类库】
-
java代码自动生成数据库表中对应的类文件及操作数据库功能
-
IDL文件生成的Java类浅析-方法部分
-
PHP简单实现生成txt文件到指定目录的方法 php调用父类的方法 php调用类的方法 php函数和方法的区
-
PHP简单实现生成txt文件到指定目录的方法 php调用父类的方法 php调用类的方法 php函数和方法的区