thrift:swift 命令行生成 IDL文件及Client java代码过程
swift是一个用于创建thrift 序列化类型和服务的java工具库,使用swfit可以生成非常简洁的java代码。并且更重要的是可以通过java代码生成接口描述文件(Thrift interface description language,IDL). 下面的TestService.java定义了一个简单的服务接口,本文以实例的例子说明将这个服务接口生成thrift client端代码的过程: package net.gdface.facelog;
import com.facebook.swift.service.ThriftMethod;
import com.facebook.swift.service.ThriftService;
@ThriftService
public interface TestService {
@ThriftMethod
public void setBean(TestBean bean);
@ThriftMethod
public TestBean getBean() throws ServiceRuntime;
}
TestBean.java package net.gdface.facelog;
import com.facebook.swift.codec.ThriftField;
import com.facebook.swift.codec.ThriftStruct;
@ThriftStruct
public final class TestBean{
private Integer id;
public TestBean() {
}
@ThriftField(1)
public Integer getId() {
return id;
}
@ThriftField()
public void setId(Integer id) {
this.id = id;
}
}
下载Swift2Thrift Code Generator我们首先要从TestService.java生成 IDL文件。这需要用到swift提供的工具:Swift2Thrift Code Generator url地址下载maven仓库 0.14.2 standalone版本下载地址 : maven命令下载执行maven命令下载swift2thrift-generator-cli-0.14.2-standalone.jar到lib文件夹下 mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get ^
-DremoteRepositories=central::default::http://repo1.maven.apache.org/maven2 ^
-Dartifact=com.facebook.swift:swift2thrift-generator-cli:0.14.2:jar:standalone ^
-Ddest=lib/swift2thrift-generator-cli-0.14.2-standalone.jar
这里-Dartifact参数中的 0.14.2是指定swift的版本号,如果换成RELEASE,则下载当前最高版本。
生成 IDL文件命令行执行如下命令生成IDL文件 TestService.thrift java -cp libswift2thrift-generator-cli-0.14.2-standalone.jar;targettest-classes ^
com.facebook.swift.generator.swift2thrift.Main ^
-package net.gdface.facelog ^
TestService ^
-namespace py gdface.thrift -namespace java com.gdface -namespace cpp gdface ^
-out TestService.thrift ^
-recursive
生成的TestService.thrift,文件中不仅有TestService的定义还有涉及的类型TestBean的定义: namespace java.swift net.gdface.facelog
namespace py gdface.thrift
namespace java com.gdface
namespace cpp gdface
struct TestBean {
1: i32 id;
}
service TestService {
TestBean getBean();
void setBean(1: TestBean arg0);
}
关于Swift2Thrift Code Generator的大部分的命令行参数说明参见Swift2Thrift Code Generator J:facelogfacelog-main>java -jar libswift2thrift-generator-cli-0.14.2-standalo
ne.jar
Usage: Swift2ThriftGenerator [options] <Swift-class-name...>
Options:
-allow_multiple_packages
Allow input classes to reside in different packages. The value of this
flag defines the generated java.swift namespace. Note that Swift classes
generated from the resultant Thrift file will all reside in one Java pack
age
-package,-default_package
Default package for unqualified classes
Default: <empty string>
-map
Map of external type or service to include file
-namespace
Namespace for a particular language to include
-out
Thrift IDL output file,defaults to stdout
-recursive
Generate all types transitively reachable from the specified types and
services
Default: false
-v,-verbose
Show verbose messages
Default: false
下载Swift Code Generator Tool有了前面生成的IDL文件(
url下载maven仓库 0.14.2 standalone版本下载地址 : maven命令下载执行maven命令下载swift-generator-cli-0.14.2-standalone.jar到lib文件夹下 mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get ^
-Dartifact=com.facebook.swift:swift-generator-cli:0.14.2:jar:standalone ^
-Ddest=lib/swift-generator-cli-0.14.2-standalone.jar
生成Client代码java -jar libswift-generator-cli-0.14.2-standalone.jar ^
TestService.thrift ^
-generate_beans ^
-override_package net.gdface.facelog.client ^
-out client/java
生成的service端接口代码 package net.gdface.facelog.client;
import com.facebook.swift.codec.*;
import com.facebook.swift.codec.ThriftField.Requiredness;
import com.facebook.swift.service.*;
import com.google.common.util.concurrent.ListenableFuture;
import java.io.*;
import java.util.*;
@ThriftService("TestService")
public interface TestService
{
@ThriftService("TestService")
public interface Async
{
@ThriftMethod(value = "getBean")
ListenableFuture<TestBean> getBean();
@ThriftMethod(value = "setBean")
ListenableFuture<Void> setBean(
@ThriftField(value=1,name="arg0",requiredness=Requiredness.NONE) final TestBean arg0
);
}
@ThriftMethod(value = "getBean")
TestBean getBean();
@ThriftMethod(value = "setBean")
void setBean(
@ThriftField(value=1,requiredness=Requiredness.NONE) final TestBean arg0
);
}
生成的TestBean.java代码 package net.gdface.facelog.client;
import com.facebook.swift.codec.*;
import com.facebook.swift.codec.ThriftField.Requiredness;
import java.util.*;
import static com.google.common.base.Objects.toStringHelper;
@ThriftStruct("TestBean")
public final class TestBean {
public TestBean() {
}
private int id;
@ThriftField(value=1,name="id",requiredness=Requiredness.NONE)
public int getId() { return id; }
@ThriftField
public void setId(final int id) { this.id = id; }
@Override
public String toString()
{
return toStringHelper(this)
.add("id",id)
.toString();
}
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- swift – 在MacOS上将Vapor编译为独立应用程序
- ajax部分刷新提交
- 如何使用C#使Telegram bot API中的Keyboard Button消息文本
- IVY throws IOException Resetting to invalid mark原因及解
- ruby-on-rails – gmaps4rails中的Google Maps API-Key
- ruby-on-rails – Rails Faye Apache:将Faye从瘦身转移到乘
- Quicksort按特定成员C对对象数组进行排序
- macos – 更改在OS X中使用popover segue创建的弹出窗口的外
- xStream完美转换XML、JSON
- 前端开发中常用正则表达式