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.http.impl.execchain; 29 30 import java.io.IOException; 31 32 import org.apache.http.HttpException; 33 import org.apache.http.client.methods.CloseableHttpResponse; 34 import org.apache.http.client.methods.HttpExecutionAware; 35 import org.apache.http.client.methods.HttpRequestWrapper; 36 import org.apache.http.client.protocol.HttpClientContext; 37 import org.apache.http.conn.routing.HttpRoute; 38 39 /** 40 * This interface represents an element in the HTTP request execution chain. Each element can 41 * either be a decorator around another element that implements a cross cutting aspect or 42 * a self-contained executor capable of producing a response for the given request. 43 * <p> 44 * Important: please note it is required for decorators that implement post execution aspects 45 * or response post-processing of any sort to release resources associated with the response 46 * by calling {@link CloseableHttpResponse#close()} methods in case of an I/O, protocol or 47 * runtime exception, or in case the response is not propagated to the caller. 48 * </p> 49 * 50 * @since 4.3 51 */ 52 public interface ClientExecChain { 53 54 /** 55 * Executes th request either by transmitting it to the target server or 56 * by passing it onto the next executor in the request execution chain. 57 * 58 * @param route connection route. 59 * @param request current request. 60 * @param clientContext current HTTP context. 61 * @param execAware receiver of notifications of blocking I/O operations. 62 * @return HTTP response either received from the opposite endpoint 63 * or generated locally. 64 * @throws IOException in case of a I/O error. 65 * (this type of exceptions are potentially recoverable). 66 * @throws HttpException in case of an HTTP protocol error 67 * (usually this type of exceptions are non-recoverable). 68 */ 69 CloseableHttpResponse execute( 70 HttpRoute route, 71 HttpRequestWrapper request, 72 HttpClientContext clientContext, 73 HttpExecutionAware execAware) throws IOException, HttpException; 74 75 }