HttpClient: first take on interface
git-svn-id: https://svn.apache.org/repos/asf/jakarta/httpcomponents/httpclient/trunk@500549 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
0f68582bfb
commit
cf5f12ea44
|
@ -0,0 +1,135 @@
|
|||
/*
|
||||
* $HeadURL$
|
||||
* $Revision$
|
||||
* $Date$
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*
|
||||
* This software consists of voluntary contributions made by many
|
||||
* individuals on behalf of the Apache Software Foundation. For more
|
||||
* information on the Apache Software Foundation, please see
|
||||
* <http://www.apache.org/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.http.client;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.http.HttpRequest;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.HttpException;
|
||||
import org.apache.http.params.HttpParams;
|
||||
import org.apache.http.protocol.HttpContext;
|
||||
import org.apache.http.conn.ClientConnectionManager;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Interface for an HTTP client.
|
||||
* HTTP clients encapsulate a collection of objects required to
|
||||
* execute HTTP requests while handling cookies, authentication,
|
||||
* connection management, and other features.
|
||||
*
|
||||
* @author <a href="mailto:rolandw@apache.org">Roland Weber</a>
|
||||
*
|
||||
*
|
||||
* <!-- empty lines to avoid svn diff problems -->
|
||||
* @version $Revision$
|
||||
*
|
||||
* @since 4.0
|
||||
*/
|
||||
public interface HttpClient {
|
||||
|
||||
|
||||
/**
|
||||
* Obtains the default context for this client.
|
||||
* This context will be used by default when executing requests
|
||||
* with this client.
|
||||
*
|
||||
* @return the default context
|
||||
*/
|
||||
HttpContext getContext()
|
||||
;
|
||||
|
||||
|
||||
/**
|
||||
* Obtains the parameters for this client.
|
||||
* These parameters will become defaults for all requests being
|
||||
* executed with this client, and for the parameters of all
|
||||
* dependent objects in this client.
|
||||
*
|
||||
* @return the default parameters
|
||||
*/
|
||||
HttpParams getParams()
|
||||
;
|
||||
|
||||
|
||||
/**
|
||||
* Obtains the connection manager used by this client.
|
||||
*
|
||||
* @return the connection manager
|
||||
*/
|
||||
ClientConnectionManager getConnectionManager()
|
||||
;
|
||||
|
||||
/**
|
||||
* Executes a request using the {@link #getContext default context}.
|
||||
* Same as {@link #execute(HttpRequest,HttpContext)
|
||||
* client.execute(request, client.getContext())},
|
||||
* see there for details.
|
||||
*
|
||||
* @param request the request to execute
|
||||
*
|
||||
* @return the response to the request
|
||||
*
|
||||
* @throws HttpException in case of a protocol problem
|
||||
* @throws IOException in case of an IO problem
|
||||
* <br/><i @@@>timeout exceptions?</i>
|
||||
*/
|
||||
HttpResponse execute(HttpRequest request)
|
||||
throws HttpException, IOException
|
||||
;
|
||||
|
||||
|
||||
/**
|
||||
* Executes a request using the given context.
|
||||
*
|
||||
* @param request the request to execute
|
||||
* @param context the context to use for the execution, or
|
||||
* <code>null</code> to use the
|
||||
* {@link #getContext default context}
|
||||
*
|
||||
* @return the response to the request. This is always a final response,
|
||||
* never an intermediate response with an 1xx status code.
|
||||
* Whether redirects or authentication requests will be returned
|
||||
* or handled automatically depends on the implementation and
|
||||
* configuration of this client.
|
||||
*
|
||||
* @throws HttpException in case of a protocol problem
|
||||
* @throws IOException in case of an IO problem
|
||||
* <br/><i @@@>timeout exceptions?</i>
|
||||
*/
|
||||
HttpResponse execute(HttpRequest request, HttpContext context)
|
||||
throws HttpException, IOException
|
||||
;
|
||||
|
||||
|
||||
} // interface HttpClient
|
|
@ -0,0 +1,154 @@
|
|||
/*
|
||||
* $HeadURL$
|
||||
* $Revision$
|
||||
* $Date$
|
||||
*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*
|
||||
* This software consists of voluntary contributions made by many
|
||||
* individuals on behalf of the Apache Software Foundation. For more
|
||||
* information on the Apache Software Foundation, please see
|
||||
* <http://www.apache.org/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.http.client.impl;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.http.HttpRequest;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.HttpException;
|
||||
import org.apache.http.params.HttpParams;
|
||||
import org.apache.http.protocol.HttpContext;
|
||||
import org.apache.http.protocol.SyncHttpExecutionContext;
|
||||
import org.apache.http.conn.ClientConnectionManager;
|
||||
import org.apache.http.client.HttpClient;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Convenience base class for HTTP client implementations.
|
||||
*
|
||||
* @author <a href="mailto:rolandw@apache.org">Roland Weber</a>
|
||||
*
|
||||
*
|
||||
* <!-- empty lines to avoid svn diff problems -->
|
||||
* @version $Revision$
|
||||
*
|
||||
* @since 4.0
|
||||
*/
|
||||
public abstract class AbstractHttpClient
|
||||
implements HttpClient {
|
||||
|
||||
|
||||
/** The default context. */
|
||||
protected HttpContext defaultContext;
|
||||
|
||||
/** The parameters. */
|
||||
protected HttpParams defaultParams;
|
||||
|
||||
/** The connection manager. */
|
||||
protected ClientConnectionManager connManager;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new HTTP client.
|
||||
*
|
||||
* @param context the context, or <code>null</code> to use an instance of
|
||||
* {@link SyncHttpExecutionContext SyncHttpExecutionContext}
|
||||
* @param params the parameters
|
||||
* @param conman the connection manager
|
||||
*/
|
||||
protected AbstractHttpClient(HttpContext context, HttpParams params,
|
||||
ClientConnectionManager conman) {
|
||||
if (params == null)
|
||||
throw new IllegalArgumentException
|
||||
("Parameters must not be null.");
|
||||
if (conman == null)
|
||||
throw new IllegalArgumentException
|
||||
("Connection manager must not be null.");
|
||||
|
||||
defaultParams = params;
|
||||
connManager = conman;
|
||||
defaultContext = (context != null) ?
|
||||
context : new SyncHttpExecutionContext(null);
|
||||
|
||||
} // constructor
|
||||
|
||||
|
||||
// non-javadoc, see interface HttpClient
|
||||
public final HttpContext getContext() {
|
||||
return defaultContext;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Replaces the default context.
|
||||
*
|
||||
* @param context the new default context
|
||||
*/
|
||||
public void setContext(HttpContext context) {
|
||||
if (context == null)
|
||||
throw new IllegalArgumentException
|
||||
("Context must not be null.");
|
||||
defaultContext = context;
|
||||
}
|
||||
|
||||
|
||||
// non-javadoc, see interface HttpClient
|
||||
public final HttpParams getParams() {
|
||||
return defaultParams;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Replaces the parameters.
|
||||
* The implementation here does not update parameters of dependent objects.
|
||||
*
|
||||
* @param params the new default parameters
|
||||
*/
|
||||
public void setParams(HttpParams params) {
|
||||
if (params == null)
|
||||
throw new IllegalArgumentException
|
||||
("Parameters must not be null.");
|
||||
defaultParams = params;
|
||||
}
|
||||
|
||||
|
||||
// non-javadoc, see interface HttpClient
|
||||
public final ClientConnectionManager getConnectionManager() {
|
||||
return connManager;
|
||||
}
|
||||
|
||||
|
||||
// no setConnectionManager(), too dangerous to replace while in use
|
||||
// derived classes may offer that method at their own risk
|
||||
|
||||
|
||||
// non-javadoc, see interface HttpClient
|
||||
public final HttpResponse execute(HttpRequest request)
|
||||
throws HttpException, IOException {
|
||||
|
||||
return execute(request, defaultContext);
|
||||
}
|
||||
|
||||
|
||||
} // class AbstractHttpClient
|
Loading…
Reference in New Issue