]> git.proxmox.com Git - ceph.git/blame - ceph/src/jaegertracing/thrift/lib/java/src/org/apache/thrift/server/TServlet.java
buildsys: switch source download to quincy
[ceph.git] / ceph / src / jaegertracing / thrift / lib / java / src / org / apache / thrift / server / TServlet.java
CommitLineData
f67539c2
TL
1package org.apache.thrift.server;
2
3import java.io.IOException;
4import java.io.InputStream;
5import java.io.OutputStream;
6import java.util.ArrayList;
7import java.util.Collection;
8import java.util.Map;
9
10import javax.servlet.ServletException;
11import javax.servlet.http.HttpServlet;
12import javax.servlet.http.HttpServletRequest;
13import javax.servlet.http.HttpServletResponse;
14
15import org.apache.thrift.TException;
16import org.apache.thrift.TProcessor;
17import org.apache.thrift.protocol.TProtocol;
18import org.apache.thrift.protocol.TProtocolFactory;
19import org.apache.thrift.transport.TIOStreamTransport;
20import org.apache.thrift.transport.TTransport;
21
22/**
23 * Servlet implementation class ThriftServer
24 */
25public class TServlet extends HttpServlet {
26
27 private final TProcessor processor;
28
29 private final TProtocolFactory inProtocolFactory;
30
31 private final TProtocolFactory outProtocolFactory;
32
33 private final Collection<Map.Entry<String, String>> customHeaders;
34
35 /**
36 * @see HttpServlet#HttpServlet()
37 */
38 public TServlet(TProcessor processor, TProtocolFactory inProtocolFactory,
39 TProtocolFactory outProtocolFactory) {
40 super();
41 this.processor = processor;
42 this.inProtocolFactory = inProtocolFactory;
43 this.outProtocolFactory = outProtocolFactory;
44 this.customHeaders = new ArrayList<Map.Entry<String, String>>();
45 }
46
47 /**
48 * @see HttpServlet#HttpServlet()
49 */
50 public TServlet(TProcessor processor, TProtocolFactory protocolFactory) {
51 this(processor, protocolFactory, protocolFactory);
52 }
53
54 /**
55 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
56 * response)
57 */
58 @Override
59 protected void doPost(HttpServletRequest request, HttpServletResponse response)
60 throws ServletException, IOException {
61
62 TTransport inTransport = null;
63 TTransport outTransport = null;
64
65 try {
66 response.setContentType("application/x-thrift");
67
68 if (null != this.customHeaders) {
69 for (Map.Entry<String, String> header : this.customHeaders) {
70 response.addHeader(header.getKey(), header.getValue());
71 }
72 }
73 InputStream in = request.getInputStream();
74 OutputStream out = response.getOutputStream();
75
76 TTransport transport = new TIOStreamTransport(in, out);
77 inTransport = transport;
78 outTransport = transport;
79
80 TProtocol inProtocol = inProtocolFactory.getProtocol(inTransport);
81 TProtocol outProtocol = outProtocolFactory.getProtocol(outTransport);
82
83 processor.process(inProtocol, outProtocol);
84 out.flush();
85 } catch (TException te) {
86 throw new ServletException(te);
87 }
88 }
89
90 /**
91 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
92 * response)
93 */
94 protected void doGet(HttpServletRequest request, HttpServletResponse response)
95 throws ServletException, IOException {
96 doPost(request, response);
97 }
98
99 public void addCustomHeader(final String key, final String value) {
100 this.customHeaders.add(new Map.Entry<String, String>() {
101 public String getKey() {
102 return key;
103 }
104
105 public String getValue() {
106 return value;
107 }
108
109 public String setValue(String value) {
110 return null;
111 }
112 });
113 }
114
115 public void setCustomHeaders(Collection<Map.Entry<String, String>> headers) {
116 this.customHeaders.clear();
117 this.customHeaders.addAll(headers);
118 }
119}