1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.client5.http.impl.classic;
29
30 import java.io.IOException;
31 import java.util.Iterator;
32 import java.util.Locale;
33
34 import org.apache.hc.client5.http.classic.ExecRuntime;
35 import org.apache.hc.core5.annotation.Internal;
36 import org.apache.hc.core5.http.ClassicHttpResponse;
37 import org.apache.hc.core5.http.Header;
38 import org.apache.hc.core5.http.HttpEntity;
39 import org.apache.hc.core5.http.ProtocolException;
40 import org.apache.hc.core5.http.ProtocolVersion;
41 import org.apache.hc.core5.util.Args;
42
43
44
45
46
47
48 public final class CloseableHttpResponse implements ClassicHttpResponse {
49
50 private final ClassicHttpResponse response;
51 private final ExecRuntime execRuntime;
52
53
54
55
56 @Internal
57 public static CloseableHttpResponse adapt(final ClassicHttpResponse response) {
58 if (response == null) {
59 return null;
60 }
61 return response instanceof CloseableHttpResponse
62 ? (CloseableHttpResponse) response
63 : new CloseableHttpResponse(response, null);
64 }
65
66 CloseableHttpResponse(final ClassicHttpResponse response, final ExecRuntime execRuntime) {
67 this.response = Args.notNull(response, "Response");
68 this.execRuntime = execRuntime;
69 }
70
71 @Override
72 public int getCode() {
73 return response.getCode();
74 }
75
76 @Override
77 public HttpEntity getEntity() {
78 return response.getEntity();
79 }
80
81 @Override
82 public boolean containsHeader(final String name) {
83 return response.containsHeader(name);
84 }
85
86 @Override
87 public void setVersion(final ProtocolVersion version) {
88 response.setVersion(version);
89 }
90
91 @Override
92 public void setCode(final int code) {
93 response.setCode(code);
94 }
95
96 @Override
97 public String getReasonPhrase() {
98 return response.getReasonPhrase();
99 }
100
101 @Override
102 public int countHeaders(final String name) {
103 return response.countHeaders(name);
104 }
105
106 @Override
107 public void setEntity(final HttpEntity entity) {
108 response.setEntity(entity);
109 }
110
111 @Override
112 public ProtocolVersion getVersion() {
113 return response.getVersion();
114 }
115
116 @Override
117 public void setReasonPhrase(final String reason) {
118 response.setReasonPhrase(reason);
119 }
120
121 @Override
122 public Header[] getHeaders(final String name) {
123 return response.getHeaders(name);
124 }
125
126 @Override
127 public void addHeader(final Header header) {
128 response.addHeader(header);
129 }
130
131 @Override
132 public Locale getLocale() {
133 return response.getLocale();
134 }
135
136 @Override
137 public void addHeader(final String name, final Object value) {
138 response.addHeader(name, value);
139 }
140
141 @Override
142 public void setLocale(final Locale loc) {
143 response.setLocale(loc);
144 }
145
146 @Override
147 public Header getHeader(final String name) throws ProtocolException {
148 return response.getHeader(name);
149 }
150
151 @Override
152 public void setHeader(final Header header) {
153 response.setHeader(header);
154 }
155
156 @Override
157 public Header getFirstHeader(final String name) {
158 return response.getFirstHeader(name);
159 }
160
161 @Override
162 public void setHeader(final String name, final Object value) {
163 response.setHeader(name, value);
164 }
165
166 @Override
167 public void setHeaders(final Header... headers) {
168 response.setHeaders(headers);
169 }
170
171 @Override
172 public boolean removeHeader(final Header header) {
173 return response.removeHeader(header);
174 }
175
176 @Override
177 public boolean removeHeaders(final String name) {
178 return response.removeHeaders(name);
179 }
180
181 @Override
182 public Header getLastHeader(final String name) {
183 return response.getLastHeader(name);
184 }
185
186 @Override
187 public Header[] getHeaders() {
188 return response.getHeaders();
189 }
190
191 @Override
192 public Iterator<Header> headerIterator() {
193 return response.headerIterator();
194 }
195
196 @Override
197 public Iterator<Header> headerIterator(final String name) {
198 return response.headerIterator(name);
199 }
200
201 @Override
202 public void close() throws IOException {
203 if (execRuntime != null) {
204 try {
205 response.close();
206 execRuntime.disconnectEndpoint();
207 } finally {
208 execRuntime.discardEndpoint();
209 }
210 } else {
211 response.close();
212 }
213 }
214
215 @Override
216 public String toString() {
217 return response.toString();
218 }
219
220 }