您可以使用Swift。
使长话短说; 注释您的类和接口(Thrift 用语中的结构和服务)。然后,您可以运行 Swift 的客户端/服务器代码,也可以使用 swift2thrift 生成器生成等效的 IDL 并使用 Thrift 编译器生成客户端(我建议您使用后者)。
一旦完成创建一个 TProcessor,您可以在具有普通 TProtocol/TTransport 对象的 TServlet 中使用该 TProcessor,请在 servlet 的 init() 中执行以下操作:
protected void addProcessor(String name, Object svc) {
ThriftCodecManager codecManager = new ThriftCodecManager(
new CompilerThriftCodecFactory(false)
);
List<ThriftEventHandler> eventList = Collections.emptyList();
ThriftServiceProcessor proc = new ThriftServiceProcessor(codecManager, eventList, svc);
this.processors.put(name, proc);
this.multiplex.registerProcessor(name, NiftyProcessorAdapters.processorToTProcessor(proc));
}
此示例中的多路复用实例变量是TMultiplexedProcessor
from的一个实例libthrift.jar
。
然后在你的 doPost() 中执行此操作:
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
getServletContext().log("entering doPost()");
TTransport inTransport = null;
TTransport outTransport = null;
try {
InputStream in = request.getInputStream();
OutputStream out = response.getOutputStream();
TTransport transport = new TIOStreamTransport(in, out);
inTransport = transport;
outTransport = transport;
TProtocol inProtocol = getInProtocolFactory().getProtocol(inTransport);
TProtocol outProtocol = getOutProtocolFactory().getProtocol(outTransport);
if (multiplex.process(inProtocol, outProtocol)) {
out.flush();
} else {
throw new ServletException("multiplex.process() returned false");
}
} catch (TException te) {
throw new ServletException(te);
} finally {
if (inTransport != null) {
inTransport.close();
}
if (outTransport != null) {
outTransport.close();
}
}
}
仅供参考 - TJSONProtocol 不适用于 0.14 版之前的 Swift 版本,因此此时如果需要使用它,您需要从源代码构建。
另外...... Swift 强制标记你的结构final
...... JPA 规范说实体不能final
......似乎无论如何都可以与 Eclipselink 一起使用,但 YMMV