diff --git a/src/java/org/apache/http/impl/client/AutoCloseInputStream.java b/src/java/org/apache/http/impl/client/AutoCloseInputStream.java deleted file mode 100644 index dff6bc223..000000000 --- a/src/java/org/apache/http/impl/client/AutoCloseInputStream.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - * $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 - * . - * - */ - -package org.apache.http.impl.client; - -import java.io.FilterInputStream; -import java.io.IOException; -import java.io.InputStream; - -/** - * Closes an underlying stream as soon as the end of the stream is reached, and - * notifies a client when it has done so. - * - * @author Ortwin Glueck - * @author Eric Johnson - * @author Mike Bowler - * - * @since 4.0 - */ -class AutoCloseInputStream extends FilterInputStream { - - /** - * The watcher is notified when the contents of the stream have - * been exhausted - */ - private ResponseConsumedWatcher watcher = null; - private boolean watcherNotified = false; - /** - * Create a new auto closing stream for the provided connection - * - * @param in the input stream to read from - * @param watcher To be notified when the contents of the stream have been - * consumed. - */ - public AutoCloseInputStream( - final InputStream in, final ResponseConsumedWatcher watcher) { - super(in); - this.watcher = watcher; - } - - /** - * Reads the next byte of data from the input stream. - * - * @throws IOException when there is an error reading - * @return the character read, or -1 for EOF - */ - public int read() throws IOException { - int l = super.read(); - checkEndOfStream(l); - return l; - } - - /** - * Reads up to len bytes of data from the stream. - * - * @param b a byte array to read data into - * @param off an offset within the array to store data - * @param len the maximum number of bytes to read - * @return the number of bytes read or -1 for EOF - * @throws IOException if there are errors reading - */ - public int read(byte[] b, int off, int len) throws IOException { - int l = super.read(b, off, len); - checkEndOfStream(l); - return l; - } - - /** - * Reads some number of bytes from the input stream and stores them into the - * buffer array b. - * - * @param b a byte array to read data into - * @return the number of bytes read or -1 for EOF - * @throws IOException if there are errors reading - */ - public int read(byte[] b) throws IOException { - int l = super.read(b); - checkEndOfStream(l); - return l; - } - - /** - * Close the stream, and also close the underlying stream if it is not - * already closed. - * @throws IOException If an IO problem occurs. - */ - public void close() throws IOException { - super.close(); - ensureWatcherNotified(); - } - - /** - * Close the underlying stream should the end of the stream arrive. - * - * @param readResult The result of the read operation to check. - * @throws IOException If an IO problem occurs. - */ - private void checkEndOfStream(int readResult) throws IOException { - if (readResult == -1) { - close(); - } - } - - /** - * Notify the watcher that the contents have been consumed. - * @throws IOException If an IO problem occurs. - */ - private void ensureWatcherNotified() throws IOException { - if (!this.watcherNotified) { - this.watcherNotified = true; - if (watcher != null) { - watcher.responseConsumed(); - } - } - } -} - diff --git a/src/java/org/apache/http/impl/client/DefaultResponseConsumedWatcher.java b/src/java/org/apache/http/impl/client/DefaultResponseConsumedWatcher.java deleted file mode 100644 index c743488da..000000000 --- a/src/java/org/apache/http/impl/client/DefaultResponseConsumedWatcher.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * $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 - * . - * - */ - -package org.apache.http.impl.client; - -import java.io.IOException; - -import org.apache.http.ConnectionReuseStrategy; -import org.apache.http.HttpConnection; -import org.apache.http.HttpResponse; -import org.apache.http.impl.DefaultConnectionReuseStrategy; -import org.apache.http.protocol.HttpContext; - -/** - *

- *

- * @author Oleg Kalnichevski - * - * @version $Revision$ - * - * @since 4.0 - */ -public class DefaultResponseConsumedWatcher - implements ResponseConsumedWatcher { - - private final HttpConnection conn; - private final HttpResponse response; - private final HttpContext context; - - public DefaultResponseConsumedWatcher( - final HttpConnection conn, - final HttpResponse response, - final HttpContext context) { - super(); - if (conn == null) { - throw new IllegalArgumentException("HTTP connection may not be null"); - } - if (response == null) { - throw new IllegalArgumentException("HTTP response may not be null"); - } - this.conn = conn; - this.response = response; - this.context = context; - } - - public void responseConsumed() { - ConnectionReuseStrategy s = new DefaultConnectionReuseStrategy(); - if (!s.keepAlive(this.response, this.context)) { - try { - this.conn.close(); - } catch (IOException ex) { - // log error - } - } - } - -} diff --git a/src/java/org/apache/http/impl/client/ResponseConsumedWatcher.java b/src/java/org/apache/http/impl/client/ResponseConsumedWatcher.java deleted file mode 100644 index d9668cb29..000000000 --- a/src/java/org/apache/http/impl/client/ResponseConsumedWatcher.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * $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 - * . - * - */ - -package org.apache.http.impl.client; - -/** - * When a response stream has been consumed, various parts of the HttpClient - * implementation need to respond appropriately. - * - *

When one of the three types of {@link java.io.InputStream}, one of - * AutoCloseInputStream (package), - * ContentLengthInputStream, or - * ChunkedInputStream finishes with its content, either because - * all content has been consumed, or because it was explicitly closed, - * it notifies its corresponding method via this interface.

- * - * @author Eric Johnson - */ -interface ResponseConsumedWatcher { - - /** - * A response has been consumed. - */ - void responseConsumed(); -} diff --git a/src/test/org/apache/http/impl/client/TestAllHttpClientImpl.java b/src/test/org/apache/http/impl/client/TestAllHttpClientImpl.java index 8c71602a0..2e269e5bd 100644 --- a/src/test/org/apache/http/impl/client/TestAllHttpClientImpl.java +++ b/src/test/org/apache/http/impl/client/TestAllHttpClientImpl.java @@ -40,8 +40,6 @@ public class TestAllHttpClientImpl extends TestCase { public static Test suite() { TestSuite suite = new TestSuite(); - suite.addTest(TestAutoCloseInputStream.suite()); - suite.addTest(TestDefaultResponseConsumedWatcher.suite()); return suite; } diff --git a/src/test/org/apache/http/impl/client/TestAutoCloseInputStream.java b/src/test/org/apache/http/impl/client/TestAutoCloseInputStream.java deleted file mode 100644 index fe285b6c3..000000000 --- a/src/test/org/apache/http/impl/client/TestAutoCloseInputStream.java +++ /dev/null @@ -1,115 +0,0 @@ -/* - * $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 - * . - * - */ - -package org.apache.http.impl.client; - -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -public class TestAutoCloseInputStream extends TestCase { - - public TestAutoCloseInputStream(String testName) { - super(testName); - } - - // ------------------------------------------------------- TestCase Methods - - public static Test suite() { - return new TestSuite(TestAutoCloseInputStream.class); - } - - // ------------------------------------------------------------------- Main - public static void main(String args[]) { - String[] testCaseName = { TestAutoCloseInputStream.class.getName() }; - junit.textui.TestRunner.main(testCaseName); - } - - class TestResponseConsumedWatcher implements ResponseConsumedWatcher { - - private int count; - - public TestResponseConsumedWatcher() { - super(); - count = 0; - } - - public void responseConsumed() { - count++; - } - - public int getCount() { - return this.count; - } - }; - - - public void testConstructors() throws Exception { - InputStream instream = new ByteArrayInputStream(new byte[] {}); - ResponseConsumedWatcher watcher = new TestResponseConsumedWatcher(); - new AutoCloseInputStream(instream, watcher); - new AutoCloseInputStream(instream, null); - } - - public void testBasics() throws IOException { - byte[] input = "0123456789ABCDEF".getBytes("US-ASCII"); - InputStream instream = new ByteArrayInputStream(input); - TestResponseConsumedWatcher watcher = new TestResponseConsumedWatcher(); - instream = new AutoCloseInputStream(instream, watcher); - byte[] tmp = new byte[input.length]; - int ch = instream.read(); - assertTrue(ch != -1); - tmp[0] = (byte)ch; - assertTrue(instream.read(tmp, 1, tmp.length - 1) != -1); - assertTrue(instream.read(tmp) == -1); - for (int i = 0; i < input.length; i++) { - assertEquals(input[i], tmp[i]); - } - assertTrue(instream.read() == -1); - instream.close(); - instream.close(); - // Has been triggered once only - assertEquals(1, watcher.getCount()); - } - - public void testNullWatcher() throws IOException { - byte[] input = "0".getBytes("US-ASCII"); - InputStream instream = new ByteArrayInputStream(input); - instream = new AutoCloseInputStream(instream, null); - assertTrue(instream.read() != -1); - assertTrue(instream.read() == -1); - assertTrue(instream.read() == -1); - } -} - diff --git a/src/test/org/apache/http/impl/client/TestDefaultResponseConsumedWatcher.java b/src/test/org/apache/http/impl/client/TestDefaultResponseConsumedWatcher.java deleted file mode 100644 index 22275aff2..000000000 --- a/src/test/org/apache/http/impl/client/TestDefaultResponseConsumedWatcher.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * $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 - * . - * - */ - -package org.apache.http.impl.client; - -import java.io.ByteArrayInputStream; -import java.io.InputStream; - -import org.apache.http.HttpConnection; -import org.apache.http.HttpResponse; -import org.apache.http.HttpVersion; -import org.apache.http.entity.BasicHttpEntity; -import org.apache.http.params.BasicHttpParams; -import org.apache.http.message.BasicHttpResponse; -import org.apache.http.mockup.HttpConnectionMockup; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpExecutionContext; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -public class TestDefaultResponseConsumedWatcher extends TestCase { - - public TestDefaultResponseConsumedWatcher(String testName) { - super(testName); - } - - // ------------------------------------------------------- TestCase Methods - - public static Test suite() { - return new TestSuite(TestDefaultResponseConsumedWatcher.class); - } - - // ------------------------------------------------------------------- Main - public static void main(String args[]) { - String[] testCaseName = { TestDefaultResponseConsumedWatcher.class.getName() }; - junit.textui.TestRunner.main(testCaseName); - } - - public void testIllegalResponseArg() throws Exception { - try { - new DefaultResponseConsumedWatcher(null, null, null); - fail("IllegalArgumentException should have been thrown"); - } catch (IllegalArgumentException ex) { - // expected - } - try { - new DefaultResponseConsumedWatcher( - new HttpConnectionMockup(), null, null); - fail("IllegalArgumentException should have been thrown"); - } catch (IllegalArgumentException ex) { - // expected - } - } - - public void testConnectionAutoClose() throws Exception { - HttpContext context = new HttpExecutionContext(null); - byte[] data = new byte[] {'1', '2', '3'}; - HttpConnection conn = new HttpConnectionMockup(); - BasicHttpEntity entity = new BasicHttpEntity(); - entity.setChunked(false); - entity.setContentLength(data.length); - entity.setContent(new ByteArrayInputStream(data)); - - HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_0, 200, "OK"); - response.addHeader("Connection", "Close"); - response.setParams(new BasicHttpParams(null)); - response.setEntity(entity); - - // Wrap the entity input stream - ResponseConsumedWatcher watcher = new DefaultResponseConsumedWatcher( - conn, response, context); - InputStream content = new AutoCloseInputStream(entity.getContent(), watcher); - assertTrue(conn.isOpen()); - while (content.read() != -1) {} - assertFalse(conn.isOpen()); - } - - public void testConnectionKeepAlive() throws Exception { - HttpContext context = new HttpExecutionContext(null); - byte[] data = new byte[] {'1', '2', '3'}; - HttpConnection conn = new HttpConnectionMockup(); - BasicHttpEntity entity = new BasicHttpEntity(); - entity.setChunked(false); - entity.setContentLength(data.length); - entity.setContent(new ByteArrayInputStream(data)); - - HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); - response.addHeader("Connection", "Keep-alive"); - response.setParams(new BasicHttpParams(null)); - response.setEntity(entity); - - // Wrap the entity input stream - ResponseConsumedWatcher watcher = new DefaultResponseConsumedWatcher( - conn, response, context); - InputStream content = new AutoCloseInputStream(entity.getContent(), watcher); - - assertTrue(conn.isOpen()); - while (content.read() != -1) {} - assertTrue(conn.isOpen()); - } -} -