001/* 002 * ==================================================================== 003 * Licensed to the Apache Software Foundation (ASF) under one 004 * or more contributor license agreements. See the NOTICE file 005 * distributed with this work for additional information 006 * regarding copyright ownership. The ASF licenses this file 007 * to you under the Apache License, Version 2.0 (the 008 * "License"); you may not use this file except in compliance 009 * with the License. You may obtain a copy of the License at 010 * 011 * http://www.apache.org/licenses/LICENSE-2.0 012 * 013 * Unless required by applicable law or agreed to in writing, 014 * software distributed under the License is distributed on an 015 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 016 * KIND, either express or implied. See the License for the 017 * specific language governing permissions and limitations 018 * under the License. 019 * ==================================================================== 020 * 021 * This software consists of voluntary contributions made by many 022 * individuals on behalf of the Apache Software Foundation. For more 023 * information on the Apache Software Foundation, please see 024 * <http://www.apache.org/>. 025 * 026 */ 027 028package org.apache.http.impl.execchain; 029 030import java.io.IOException; 031import java.util.Locale; 032 033import org.apache.http.Header; 034import org.apache.http.HeaderIterator; 035import org.apache.http.HttpEntity; 036import org.apache.http.HttpResponse; 037import org.apache.http.ProtocolVersion; 038import org.apache.http.StatusLine; 039import org.apache.http.client.methods.CloseableHttpResponse; 040import org.apache.http.params.HttpParams; 041 042/** 043 * A proxy class for {@link org.apache.http.HttpResponse} that can be used to release client connection 044 * associated with the original response. 045 * 046 * @since 4.3 047 */ 048class HttpResponseProxy implements CloseableHttpResponse { 049 050 private final HttpResponse original; 051 private final ConnectionHolder connHolder; 052 053 public HttpResponseProxy(final HttpResponse original, final ConnectionHolder connHolder) { 054 this.original = original; 055 this.connHolder = connHolder; 056 ResponseEntityProxy.enchance(original, connHolder); 057 } 058 059 @Override 060 public void close() throws IOException { 061 if (this.connHolder != null) { 062 this.connHolder.close(); 063 } 064 } 065 066 @Override 067 public StatusLine getStatusLine() { 068 return original.getStatusLine(); 069 } 070 071 @Override 072 public void setStatusLine(final StatusLine statusline) { 073 original.setStatusLine(statusline); 074 } 075 076 @Override 077 public void setStatusLine(final ProtocolVersion ver, final int code) { 078 original.setStatusLine(ver, code); 079 } 080 081 @Override 082 public void setStatusLine(final ProtocolVersion ver, final int code, final String reason) { 083 original.setStatusLine(ver, code, reason); 084 } 085 086 @Override 087 public void setStatusCode(final int code) throws IllegalStateException { 088 original.setStatusCode(code); 089 } 090 091 @Override 092 public void setReasonPhrase(final String reason) throws IllegalStateException { 093 original.setReasonPhrase(reason); 094 } 095 096 @Override 097 public HttpEntity getEntity() { 098 return original.getEntity(); 099 } 100 101 @Override 102 public void setEntity(final HttpEntity entity) { 103 original.setEntity(entity); 104 } 105 106 @Override 107 public Locale getLocale() { 108 return original.getLocale(); 109 } 110 111 @Override 112 public void setLocale(final Locale loc) { 113 original.setLocale(loc); 114 } 115 116 @Override 117 public ProtocolVersion getProtocolVersion() { 118 return original.getProtocolVersion(); 119 } 120 121 @Override 122 public boolean containsHeader(final String name) { 123 return original.containsHeader(name); 124 } 125 126 @Override 127 public Header[] getHeaders(final String name) { 128 return original.getHeaders(name); 129 } 130 131 @Override 132 public Header getFirstHeader(final String name) { 133 return original.getFirstHeader(name); 134 } 135 136 @Override 137 public Header getLastHeader(final String name) { 138 return original.getLastHeader(name); 139 } 140 141 @Override 142 public Header[] getAllHeaders() { 143 return original.getAllHeaders(); 144 } 145 146 @Override 147 public void addHeader(final Header header) { 148 original.addHeader(header); 149 } 150 151 @Override 152 public void addHeader(final String name, final String value) { 153 original.addHeader(name, value); 154 } 155 156 @Override 157 public void setHeader(final Header header) { 158 original.setHeader(header); 159 } 160 161 @Override 162 public void setHeader(final String name, final String value) { 163 original.setHeader(name, value); 164 } 165 166 @Override 167 public void setHeaders(final Header[] headers) { 168 original.setHeaders(headers); 169 } 170 171 @Override 172 public void removeHeader(final Header header) { 173 original.removeHeader(header); 174 } 175 176 @Override 177 public void removeHeaders(final String name) { 178 original.removeHeaders(name); 179 } 180 181 @Override 182 public HeaderIterator headerIterator() { 183 return original.headerIterator(); 184 } 185 186 @Override 187 public HeaderIterator headerIterator(final String name) { 188 return original.headerIterator(name); 189 } 190 191 @Override 192 @Deprecated 193 public HttpParams getParams() { 194 return original.getParams(); 195 } 196 197 @Override 198 @Deprecated 199 public void setParams(final HttpParams params) { 200 original.setParams(params); 201 } 202 203 @Override 204 public String toString() { 205 final StringBuilder sb = new StringBuilder("HttpResponseProxy{"); 206 sb.append(original); 207 sb.append('}'); 208 return sb.toString(); 209 } 210 211}