You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ro...@apache.org on 2007/01/27 16:36:52 UTC

svn commit: r500549 - in /jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client: HttpClient.java impl/AbstractHttpClient.java

Author: rolandw
Date: Sat Jan 27 07:36:51 2007
New Revision: 500549

URL: http://svn.apache.org/viewvc?view=rev&rev=500549
Log:
HttpClient: first take on interface

Added:
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/HttpClient.java   (with props)
    jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/impl/AbstractHttpClient.java   (with props)

Added: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/HttpClient.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/HttpClient.java?view=auto&rev=500549
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/HttpClient.java (added)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/HttpClient.java Sat Jan 27 07:36:51 2007
@@ -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

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/HttpClient.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/HttpClient.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/HttpClient.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/impl/AbstractHttpClient.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/impl/AbstractHttpClient.java?view=auto&rev=500549
==============================================================================
--- jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/impl/AbstractHttpClient.java (added)
+++ jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/impl/AbstractHttpClient.java Sat Jan 27 07:36:51 2007
@@ -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

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/impl/AbstractHttpClient.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/impl/AbstractHttpClient.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: jakarta/httpcomponents/httpclient/trunk/src/java/org/apache/http/client/impl/AbstractHttpClient.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain