diff --git a/httpclient/src/main/java/org/apache/http/impl/conn/DefaultManagedHttpClientConnection.java b/httpclient/src/main/java/org/apache/http/impl/conn/DefaultManagedHttpClientConnection.java new file mode 100644 index 000000000..d7315b2b0 --- /dev/null +++ b/httpclient/src/main/java/org/apache/http/impl/conn/DefaultManagedHttpClientConnection.java @@ -0,0 +1,132 @@ +/* + * ==================================================================== + * 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.conn; + +import java.io.IOException; +import java.io.InterruptedIOException; +import java.net.Socket; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocket; + +import org.apache.http.HttpRequest; +import org.apache.http.HttpResponse; +import org.apache.http.config.MessageConstraints; +import org.apache.http.conn.ManagedHttpClientConnection; +import org.apache.http.entity.ContentLengthStrategy; +import org.apache.http.impl.DefaultBHttpClientConnection; +import org.apache.http.io.HttpMessageParserFactory; +import org.apache.http.io.HttpMessageWriterFactory; +import org.apache.http.protocol.HttpContext; + +/** + * @since 4.3 + */ +public class DefaultManagedHttpClientConnection extends DefaultBHttpClientConnection + implements ManagedHttpClientConnection, HttpContext { + + private final String id; + private final Map attributes; + + private volatile boolean shutdown; + + public DefaultManagedHttpClientConnection( + final String id, + final int buffersize, + final int fragmentSizeHint, + final CharsetDecoder chardecoder, + final CharsetEncoder charencoder, + final MessageConstraints constraints, + final ContentLengthStrategy incomingContentStrategy, + final ContentLengthStrategy outgoingContentStrategy, + final HttpMessageWriterFactory requestWriterFactory, + final HttpMessageParserFactory responseParserFactory) { + super(buffersize, fragmentSizeHint, chardecoder, charencoder, + constraints, incomingContentStrategy, outgoingContentStrategy, + requestWriterFactory, responseParserFactory); + this.id = id; + this.attributes = new ConcurrentHashMap(); + } + + public DefaultManagedHttpClientConnection( + final String id, + final int buffersize) { + this(id, buffersize, buffersize, null, null, null, null, null, null, null); + } + + public String getId() { + return this.id; + } + + @Override + public void shutdown() throws IOException { + this.shutdown = true; + super.shutdown(); + } + + public Object getAttribute(final String id) { + return this.attributes.get(id); + } + + public Object removeAttribute(final String id) { + return this.attributes.remove(id); + } + + public void setAttribute(final String id, final Object obj) { + this.attributes.put(id, obj); + } + + @Override + public void bind(final Socket socket) throws IOException { + if (this.shutdown) { + socket.close(); // allow this to throw... + // ...but if it doesn't, explicitly throw one ourselves. + throw new InterruptedIOException("Connection already shutdown"); + } + super.bind(socket); + } + + @Override + public Socket getSocket() { + return super.getSocket(); + } + + public SSLSession getSSLSession() { + final Socket socket = super.getSocket(); + if (socket instanceof SSLSocket) { + return ((SSLSocket) socket).getSession(); + } else { + return null; + } + } + +} diff --git a/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java b/httpclient/src/main/java/org/apache/http/impl/conn/LoggingManagedHttpClientConnection.java similarity index 69% rename from httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java rename to httpclient/src/main/java/org/apache/http/impl/conn/LoggingManagedHttpClientConnection.java index 52ee63a04..50099984d 100644 --- a/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java +++ b/httpclient/src/main/java/org/apache/http/impl/conn/LoggingManagedHttpClientConnection.java @@ -27,19 +27,6 @@ package org.apache.http.impl.conn; -import java.io.IOException; -import java.io.InputStream; -import java.io.InterruptedIOException; -import java.io.OutputStream; -import java.net.Socket; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CharsetEncoder; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -import javax.net.ssl.SSLSession; -import javax.net.ssl.SSLSocket; - import org.apache.commons.logging.Log; import org.apache.http.Header; import org.apache.http.HttpRequest; @@ -52,18 +39,25 @@ import org.apache.http.io.HttpMessageParserFactory; import org.apache.http.io.HttpMessageWriterFactory; import org.apache.http.protocol.HttpContext; -class ManagedHttpClientConnectionImpl extends DefaultBHttpClientConnection - implements ManagedHttpClientConnection, HttpContext { +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocket; +import java.io.IOException; +import java.io.InputStream; +import java.io.InterruptedIOException; +import java.io.OutputStream; +import java.net.Socket; +import java.nio.charset.CharsetDecoder; +import java.nio.charset.CharsetEncoder; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +class LoggingManagedHttpClientConnection extends DefaultManagedHttpClientConnection { - private final String id; private final Log log; private final Log headerlog; private final Wire wire; - private final Map attributes; - private volatile boolean shutdown; - - public ManagedHttpClientConnectionImpl( + public LoggingManagedHttpClientConnection( final String id, final Log log, final Log headerlog, @@ -77,24 +71,18 @@ class ManagedHttpClientConnectionImpl extends DefaultBHttpClientConnection final ContentLengthStrategy outgoingContentStrategy, final HttpMessageWriterFactory requestWriterFactory, final HttpMessageParserFactory responseParserFactory) { - super(buffersize, fragmentSizeHint, chardecoder, charencoder, + super(id, buffersize, fragmentSizeHint, chardecoder, charencoder, constraints, incomingContentStrategy, outgoingContentStrategy, requestWriterFactory, responseParserFactory); - this.id = id; this.log = log; this.headerlog = headerlog; - this.wire = new Wire(wirelog, this.id); - this.attributes = new ConcurrentHashMap(); - } - - public String getId() { - return this.id; + this.wire = new Wire(wirelog, id); } @Override public void close() throws IOException { if (this.log.isDebugEnabled()) { - this.log.debug(this.id + ": Close connection"); + this.log.debug(getId() + ": Close connection"); } super.close(); } @@ -102,9 +90,8 @@ class ManagedHttpClientConnectionImpl extends DefaultBHttpClientConnection @Override public void shutdown() throws IOException { if (this.log.isDebugEnabled()) { - this.log.debug(this.id + ": Shutdown connection"); + this.log.debug(getId() + ": Shutdown connection"); } - this.shutdown = true; super.shutdown(); } @@ -129,10 +116,10 @@ class ManagedHttpClientConnectionImpl extends DefaultBHttpClientConnection @Override protected void onResponseReceived(final HttpResponse response) { if (response != null && this.headerlog.isDebugEnabled()) { - this.headerlog.debug(this.id + " << " + response.getStatusLine().toString()); + this.headerlog.debug(getId() + " << " + response.getStatusLine().toString()); final Header[] headers = response.getAllHeaders(); for (final Header header : headers) { - this.headerlog.debug(this.id + " << " + header.toString()); + this.headerlog.debug(getId() + " << " + header.toString()); } } } @@ -140,48 +127,12 @@ class ManagedHttpClientConnectionImpl extends DefaultBHttpClientConnection @Override protected void onRequestSubmitted(final HttpRequest request) { if (request != null && this.headerlog.isDebugEnabled()) { - this.headerlog.debug(id + " >> " + request.getRequestLine().toString()); + this.headerlog.debug(getId() + " >> " + request.getRequestLine().toString()); final Header[] headers = request.getAllHeaders(); for (final Header header : headers) { - this.headerlog.debug(this.id + " >> " + header.toString()); + this.headerlog.debug(getId() + " >> " + header.toString()); } } } - public Object getAttribute(final String id) { - return this.attributes.get(id); - } - - public Object removeAttribute(final String id) { - return this.attributes.remove(id); - } - - public void setAttribute(final String id, final Object obj) { - this.attributes.put(id, obj); - } - - @Override - public void bind(final Socket socket) throws IOException { - if (this.shutdown) { - socket.close(); // allow this to throw... - // ...but if it doesn't, explicitly throw one ourselves. - throw new InterruptedIOException("Connection already shutdown"); - } - super.bind(socket); - } - - @Override - public Socket getSocket() { - return super.getSocket(); - } - - public SSLSession getSSLSession() { - final Socket socket = super.getSocket(); - if (socket instanceof SSLSocket) { - return ((SSLSocket) socket).getSession(); - } else { - return null; - } - } - } diff --git a/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java b/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java index b91a6ddef..ccd6fa887 100644 --- a/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java +++ b/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java @@ -57,7 +57,7 @@ public class ManagedHttpClientConnectionFactory public static final ManagedHttpClientConnectionFactory INSTANCE = new ManagedHttpClientConnectionFactory(); - private final Log log = LogFactory.getLog(ManagedHttpClientConnectionImpl.class); + private final Log log = LogFactory.getLog(DefaultManagedHttpClientConnection.class); private final Log headerlog = LogFactory.getLog("org.apache.http.headers"); private final Log wirelog = LogFactory.getLog("org.apache.http.wire"); @@ -101,7 +101,7 @@ public class ManagedHttpClientConnectionFactory charencoder.onUnmappableCharacter(unmappableInputAction); } final String id = "http-outgoing-" + Long.toString(COUNTER.getAndIncrement()); - return new ManagedHttpClientConnectionImpl( + return new LoggingManagedHttpClientConnection( id, log, headerlog,