您可以使用Swift.
使长话短说;注释您的类和接口(Thrift 术语中的结构和服务)。然后,您可以运行 Swift 的客户端/服务器代码,也可以使用 swift2thrift 生成器生成等效的 IDL 并使用 Thrift 编译器生成客户端(后者是我针对您所描述的内容推荐的)。
一旦创建了一个 TProcessor,您可以在带有普通 TProtocol/TTransport 对象的 TServlet 中使用它,请在 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));
}
本例中的 Multiplex 实例变量是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