hc-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ol...@apache.org
Subject svn commit: r1233307 - in /httpcomponents/httpclient/trunk/httpclient/src: main/java/org/apache/http/client/utils/HttpClientUtils.java test/java/org/apache/http/client/utils/TestHttpClientUtils.java
Date Thu, 19 Jan 2012 12:15:49 GMT
Author: olegk
Date: Thu Jan 19 12:15:48 2012
New Revision: 1233307

URL: http://svn.apache.org/viewvc?rev=1233307&view=rev
Log:
HTTPCLIENT-1159: HttpClientUtils - helper methods to release resources held by HttpClient
/ HttpResponse after use
Contributed by Karthik K <oss.akk at gmail.com>

Added:
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/HttpClientUtils.java
  (with props)
    httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestHttpClientUtils.java
  (with props)

Added: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/HttpClientUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/HttpClientUtils.java?rev=1233307&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/HttpClientUtils.java
(added)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/HttpClientUtils.java
Thu Jan 19 12:15:48 2012
@@ -0,0 +1,107 @@
+/*
+ * ====================================================================
+ * 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.utils;
+
+import java.io.IOException;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.util.EntityUtils;
+
+/**
+ * Static helpers for dealing with {@link HttpResponse}s and {@link HttpClient}s.
+ * 
+ * @since 4.2
+ */
+public class HttpClientUtils {
+
+    private HttpClientUtils() {
+    }
+
+    /**
+     * Unconditionally close a response.
+     * <p>
+     * Example Code:
+     * 
+     * <pre>
+     * HttpResponse httpResponse = null;
+     * try {
+     *     httpResponse = httpClient.execute(httpGet);
+     * } catch (Exception e) {
+     *     // error handling
+     * } finally {
+     *     HttpClientUtils.closeQuietly(httpResponse);
+     * }
+     * </pre>
+     * 
+     * @param response
+     *            the HttpResponse to release resources, may be null or already
+     *            closed.
+     * 
+     * @since 4.2
+     */
+    public static void closeQuietly(final HttpResponse response) {
+        if (response != null) {
+            HttpEntity entity = response.getEntity();
+            if (entity != null) {
+                try {
+                    EntityUtils.consume(entity);
+                } catch (final IOException ex) {
+                }
+            }
+        }
+    }
+
+    /**
+     * Unconditionally close a httpClient. Shuts down the underlying connection
+     * manager and releases the resources.
+     * <p>
+     * Example Code:
+     * 
+     * <pre>
+     * HttpClient httpClient = null;
+     * try {
+     *   httpClient = new DefaultHttpClient(...);
+     * } catch (Exception e) {
+     *   // error handling
+     * } finally {
+     *   HttpClientUtils.closeQuietly(httpClient);
+     * }
+     * </pre>
+     * 
+     * @param httpClient
+     *            the HttpClient to close, may be null or already closed.
+     * @since 4.2
+     */
+    public static void closeQuietly(final HttpClient httpClient) {
+        if (httpClient != null) {
+            httpClient.getConnectionManager().shutdown();
+        }
+    }
+
+}

Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/HttpClientUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/utils/HttpClientUtils.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

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

Added: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestHttpClientUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestHttpClientUtils.java?rev=1233307&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestHttpClientUtils.java
(added)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestHttpClientUtils.java
Thu Jan 19 12:15:48 2012
@@ -0,0 +1,125 @@
+/*
+ * ====================================================================
+ * 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.utils;
+
+import org.apache.http.HttpHost;
+import org.apache.http.HttpResponse;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.impl.conn.PoolingClientConnectionManager;
+import org.apache.http.localserver.BasicServerTestBase;
+import org.apache.http.localserver.LocalTestServer;
+import org.apache.http.protocol.BasicHttpProcessor;
+import org.apache.http.protocol.ResponseConnControl;
+import org.apache.http.protocol.ResponseContent;
+import org.apache.http.protocol.ResponseDate;
+import org.apache.http.protocol.ResponseServer;
+import org.apache.http.util.EntityUtils;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestHttpClientUtils extends BasicServerTestBase {
+
+    @Before
+    public void setUp() throws Exception {
+        BasicHttpProcessor httpproc = new BasicHttpProcessor();
+        httpproc.addInterceptor(new ResponseDate());
+        httpproc.addInterceptor(new ResponseServer());
+        httpproc.addInterceptor(new ResponseContent());
+        httpproc.addInterceptor(new ResponseConnControl());
+        this.localServer = new LocalTestServer(httpproc, null);
+    }
+
+    @Test
+    public void testCloseQuietlyClient() throws Exception {
+        HttpClient httpClient = new DefaultHttpClient();
+        HttpClientUtils.closeQuietly(httpClient);
+    }
+
+    @Test
+    public void testCloseQuietlyNullClient() throws Exception {
+        HttpClient httpClient = null;
+        HttpClientUtils.closeQuietly(httpClient);
+    }
+
+    @Test
+    public void testCloseQuietlyClientTwice() {
+        PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager();
+        HttpClient httpClient = new DefaultHttpClient(connectionManager);
+        HttpClientUtils.closeQuietly(httpClient);
+        HttpClientUtils.closeQuietly(httpClient);
+    }
+
+    @Test
+    public void testCloseQuietlyResponse() throws Exception {
+        this.localServer.registerDefaultHandlers();
+        this.localServer.start();
+        PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager();
+        HttpClient httpClient = new DefaultHttpClient(connectionManager);
+        HttpHost target = getServerHttp();
+        HttpResponse response = httpClient.execute(target, new HttpGet("/"));
+        HttpClientUtils.closeQuietly(response);
+        HttpClientUtils.closeQuietly(httpClient);
+    }
+
+    @Test
+    public void testCloseQuietlyResponseNull() throws Exception {
+        PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager();
+        HttpClient httpClient = new DefaultHttpClient(connectionManager);
+        HttpResponse response = null;
+        HttpClientUtils.closeQuietly(response);
+        HttpClientUtils.closeQuietly(httpClient);
+    }
+
+    @Test
+    public void testCloseQuietlyResponseTwice() throws Exception {
+        this.localServer.registerDefaultHandlers();
+        this.localServer.start();
+        PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager();
+        HttpClient httpClient = new DefaultHttpClient(connectionManager);
+        HttpHost target = getServerHttp();
+        HttpResponse response = httpClient.execute(target, new HttpGet("/"));
+        HttpClientUtils.closeQuietly(response);
+        HttpClientUtils.closeQuietly(response);
+        HttpClientUtils.closeQuietly(httpClient);
+    }
+
+    @Test
+    public void testCloseQuietlyResponseAfterConsumeContent() throws Exception {
+        this.localServer.registerDefaultHandlers();
+        this.localServer.start();
+        PoolingClientConnectionManager connectionManager = new PoolingClientConnectionManager();
+        HttpClient httpClient = new DefaultHttpClient(connectionManager);
+        HttpHost target = getServerHttp();
+        HttpResponse response = httpClient.execute(target, new HttpGet("/"));
+        EntityUtils.consume(response.getEntity());
+        HttpClientUtils.closeQuietly(response);
+        HttpClientUtils.closeQuietly(httpClient);
+    }
+
+}

Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestHttpClientUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/client/utils/TestHttpClientUtils.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

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



Mime
View raw message