View Javadoc
1   /*
2    * ====================================================================
3    * Licensed to the Apache Software Foundation (ASF) under one
4    * or more contributor license agreements.  See the NOTICE file
5    * distributed with this work for additional information
6    * regarding copyright ownership.  The ASF licenses this file
7    * to you under the Apache License, Version 2.0 (the
8    * "License"); you may not use this file except in compliance
9    * with the License.  You may obtain a copy of the License at
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing,
14   * software distributed under the License is distributed on an
15   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16   * KIND, either express or implied.  See the License for the
17   * specific language governing permissions and limitations
18   * under the License.
19   * ====================================================================
20   *
21   * This software consists of voluntary contributions made by many
22   * individuals on behalf of the Apache Software Foundation.  For more
23   * information on the Apache Software Foundation, please see
24   * <http://www.apache.org/>.
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.http.ClassicHttpResponse;
36  import org.apache.hc.core5.http.Header;
37  import org.apache.hc.core5.http.HttpEntity;
38  import org.apache.hc.core5.http.ProtocolException;
39  import org.apache.hc.core5.http.ProtocolVersion;
40  import org.apache.hc.core5.util.Args;
41  
42  /**
43   * Provided for backward compatibility with HttpClient 4.x.
44   *
45   * @since 4.3
46   */
47  public final class CloseableHttpResponse implements ClassicHttpResponse {
48  
49      private final ClassicHttpResponse response;
50      private final ExecRuntime execRuntime;
51  
52      static CloseableHttpResponse adapt(final ClassicHttpResponse response) {
53          if (response == null) {
54              return null;
55          }
56          return response instanceof CloseableHttpResponse
57                          ? (CloseableHttpResponse) response
58                          : new CloseableHttpResponse(response, null);
59      }
60  
61      CloseableHttpResponse(final ClassicHttpResponse response, final ExecRuntime execRuntime) {
62          this.response = Args.notNull(response, "Response");
63          this.execRuntime = execRuntime;
64      }
65  
66      @Override
67      public int getCode() {
68          return response.getCode();
69      }
70  
71      @Override
72      public HttpEntity getEntity() {
73          return response.getEntity();
74      }
75  
76      @Override
77      public boolean containsHeader(final String name) {
78          return response.containsHeader(name);
79      }
80  
81      @Override
82      public void setVersion(final ProtocolVersion version) {
83          response.setVersion(version);
84      }
85  
86      @Override
87      public void setCode(final int code) {
88          response.setCode(code);
89      }
90  
91      @Override
92      public String getReasonPhrase() {
93          return response.getReasonPhrase();
94      }
95  
96      @Override
97      public int countHeaders(final String name) {
98          return response.countHeaders(name);
99      }
100 
101     @Override
102     public void setEntity(final HttpEntity entity) {
103         response.setEntity(entity);
104     }
105 
106     @Override
107     public ProtocolVersion getVersion() {
108         return response.getVersion();
109     }
110 
111     @Override
112     public void setReasonPhrase(final String reason) {
113         response.setReasonPhrase(reason);
114     }
115 
116     @Override
117     public Header[] getHeaders(final String name) {
118         return response.getHeaders(name);
119     }
120 
121     @Override
122     public void addHeader(final Header header) {
123         response.addHeader(header);
124     }
125 
126     @Override
127     public Locale getLocale() {
128         return response.getLocale();
129     }
130 
131     @Override
132     public void addHeader(final String name, final Object value) {
133         response.addHeader(name, value);
134     }
135 
136     @Override
137     public void setLocale(final Locale loc) {
138         response.setLocale(loc);
139     }
140 
141     @Override
142     public Header getHeader(final String name) throws ProtocolException {
143         return response.getHeader(name);
144     }
145 
146     @Override
147     public void setHeader(final Header header) {
148         response.setHeader(header);
149     }
150 
151     @Override
152     public Header getFirstHeader(final String name) {
153         return response.getFirstHeader(name);
154     }
155 
156     @Override
157     public void setHeader(final String name, final Object value) {
158         response.setHeader(name, value);
159     }
160 
161     @Override
162     public void setHeaders(final Header... headers) {
163         response.setHeaders(headers);
164     }
165 
166     @Override
167     public boolean removeHeader(final Header header) {
168         return response.removeHeader(header);
169     }
170 
171     @Override
172     public boolean removeHeaders(final String name) {
173         return response.removeHeaders(name);
174     }
175 
176     @Override
177     public Header getLastHeader(final String name) {
178         return response.getLastHeader(name);
179     }
180 
181     @Override
182     public Header[] getHeaders() {
183         return response.getHeaders();
184     }
185 
186     @Override
187     public Iterator<Header> headerIterator() {
188         return response.headerIterator();
189     }
190 
191     @Override
192     public Iterator<Header> headerIterator(final String name) {
193         return response.headerIterator(name);
194     }
195 
196     @Override
197     public void close() throws IOException {
198         if (execRuntime != null) {
199             try {
200                 response.close();
201                 execRuntime.disconnectEndpoint();
202             } finally {
203                 execRuntime.discardEndpoint();
204             }
205         } else {
206             response.close();
207         }
208     }
209 
210     @Override
211     public String toString() {
212         return response.toString();
213     }
214 
215 }