]>
Commit | Line | Data |
---|---|---|
f67539c2 TL |
1 | package org.apache.thrift.server; |
2 | ||
3 | import java.io.IOException; | |
4 | import java.io.InputStream; | |
5 | import java.io.OutputStream; | |
6 | import java.util.ArrayList; | |
7 | import java.util.Collection; | |
8 | import java.util.Map; | |
9 | ||
10 | import javax.servlet.ServletException; | |
11 | import javax.servlet.http.HttpServlet; | |
12 | import javax.servlet.http.HttpServletRequest; | |
13 | import javax.servlet.http.HttpServletResponse; | |
14 | ||
15 | import org.apache.thrift.TException; | |
16 | import org.apache.thrift.TProcessor; | |
17 | import org.apache.thrift.protocol.TProtocol; | |
18 | import org.apache.thrift.protocol.TProtocolFactory; | |
19 | import org.apache.thrift.transport.TIOStreamTransport; | |
20 | import org.apache.thrift.transport.TTransport; | |
21 | ||
22 | /** | |
23 | * Servlet implementation class ThriftServer | |
24 | */ | |
25 | public 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 | } |