Release 4.0 Alpha 6 ------------------- The sixth ALPHA version of HttpComponents Core has been released. This release sports an improved message parsing and formatting API in the base module and lots of incremental improvements and bug fixes in the NIO and NIOSSL modules. Based on the improved API, it is now possible to send and receive SIP messages with HttpComponents Core. HttpCore is now feature complete and we are planning to freeze the public APIs as of next release (BETA1). * [HTTPCORE-120] new interface HeaderIterator, available from HttpMessage Contributed by Roland Weber * [HTTPCORE-118] Purge closed sessions prior to opening new ones. This should reduce chances of running out of memory when opening and closing lots of NIO connections in a tight loop. Contributed by Oleg Kalnichevski * [HTTPCORE-117] Fixed bug preventing protocol handlers from closing timed out NIO connection when pending output (output session buffer is not empty). Contributed by Oleg Kalnichevski * [HTTPCORE-86] Allow for optional handling of runtime exceptions thrown by protocol handlers to ensure the I/O dispatch thread remains running. Contributed by Oleg Kalnichevski * [HTTPCORE-116] moved parameter names to interfaces Contributed by Roland Weber * [HTTPCORE-109] Improved shutdown process of the I/O reactors in NIO modules. I/O reactors now attempt to terminate connections gracefully before shutting down the underlying socket channels. Contributed by Oleg Kalnichevski * [HTTPCORE-107] allow sending and receiving of SIP messages Contributed by Roland Weber * [HTTPCORE-114]: Fixed incorrect handling of the end-of-stream condition in SSLIOSession. Oleg Kalnichevski * [HTTPCORE-110] refactored message parsing and formatting logic Contributed by Roland Weber * [HTTPCORE-113] Removed unnecessary target hostname resolution from non-blocking client protocol handlers. Oleg Kalnichevski * [HTTPCORE-108] Close all channels registered with the I/O reactor during shutdown. Fixed the problem with DefaultListeningIOReactor not releasing socket ports until JVM is restarted. Oleg Kalnichevski * [HTTPCORE-106] Pluggable HTTP message parsers and message writers Oleg Kalnichevski * [HTTPCORE-105] Consistent class names in base and NIO modules Oleg Kalnichevski * [HTTPCORE-100] revised HttpContext hierarchy Contributed by Roland Weber * [HTTPCORE-103] NIO connections now attempt to consume all available session data while parsing HTTP messages. This can potentially improve performance of non-blocking SSL connections. Contributed by Steffen Pingel * [HTTPCORE-102] Exceeding of maximum line length limit detected late Contributed by Steffen Pingel * [HTTPCORE-21] Transport and connection metrics Contributed by Andrea Selva and Oleg Kalnichevski * [HTTPCORE-91] new interceptor RequestDate, renamed constants in protocol.HTTP Contributed by Roland Weber * [HTTPCORE-90] Version detection based on build-time properties Contributed by Oleg Kalnichevski and Roland Weber * [HTTPCORE-88] Added convenience methods to HttpRequestInterceptorList, HttpResponseInterceptorList interfaces Contributed by Andrea Selva * [HTTPCORE-89]: Fixed bug in DefaultConnectingIOReactor causing incorrect handling of local (immediate) connections on some platforms (affects Sun Solaris 2.9 / Sparc and likely other Solaris 2.x platforms) Contributed by Sam Berlin HttpCore API changes (generated by JarDiff 0.2) -------------------------------------- Class removed: public abstract org.apache.http.impl.io.AbstractHttpDataReceiver extends java.lang.Object implements org.apache.http.io.HttpDataReceiver Class removed: public abstract org.apache.http.impl.io.AbstractHttpDataTransmitter extends java.lang.Object implements org.apache.http.io.HttpDataTransmitter Class removed: public org.apache.http.impl.io.HttpDataInputStream extends java.io.InputStream Class removed: public org.apache.http.impl.io.HttpDataOutputStream extends java.io.OutputStream Class removed: public org.apache.http.impl.io.SocketHttpDataReceiver extends org.apache.http.impl.io.AbstractHttpDataReceiver Class removed: public org.apache.http.impl.io.SocketHttpDataTransmitter extends org.apache.http.impl.io.AbstractHttpDataTransmitter Class removed: public abstract org.apache.http.io.HttpDataReceiver extends java.lang.Object Class removed: public abstract org.apache.http.io.HttpDataTransmitter extends java.lang.Object Class removed: public org.apache.http.message.BasicHttpVersionFormat extends java.lang.Object Class removed: public org.apache.http.protocol.HttpExecutionContext extends java.lang.Object implements org.apache.http.protocol.HttpContext Class removed: public org.apache.http.protocol.SyncHttpExecutionContext extends org.apache.http.protocol.HttpExecutionContext Class removed: public final org.apache.http.util.HeaderUtils extends java.lang.Object Class added: public abstract org.apache.http.FormattedHeader extends java.lang.Object implements org.apache.http.Header Class added: public abstract org.apache.http.HeaderIterator extends java.lang.Object implements java.util.Iterator Class added: public org.apache.http.ParseException extends java.lang.RuntimeException Class added: public org.apache.http.ProtocolVersion extends java.lang.Object implements java.io.Serializable Class added: public abstract org.apache.http.impl.io.AbstractMessageParser extends java.lang.Object implements org.apache.http.io.HttpMessageParser Class added: public abstract org.apache.http.impl.io.AbstractMessageWriter extends java.lang.Object implements org.apache.http.io.HttpMessageWriter Class added: public abstract org.apache.http.impl.io.AbstractSessionInputBuffer extends java.lang.Object implements org.apache.http.io.SessionInputBuffer Class added: public abstract org.apache.http.impl.io.AbstractSessionOutputBuffer extends java.lang.Object implements org.apache.http.io.SessionOutputBuffer Class added: public org.apache.http.impl.io.HttpRequestParser extends org.apache.http.impl.io.AbstractMessageParser Class added: public org.apache.http.impl.io.HttpRequestWriter extends org.apache.http.impl.io.AbstractMessageWriter Class added: public org.apache.http.impl.io.HttpResponseParser extends org.apache.http.impl.io.AbstractMessageParser Class added: public org.apache.http.impl.io.HttpResponseWriter extends org.apache.http.impl.io.AbstractMessageWriter Class added: public org.apache.http.impl.io.IdentityInputStream extends java.io.InputStream Class added: public org.apache.http.impl.io.SocketInputBuffer extends org.apache.http.impl.io.AbstractSessionInputBuffer Class added: public org.apache.http.impl.io.SocketOutputBuffer extends org.apache.http.impl.io.AbstractSessionOutputBuffer Class added: public abstract org.apache.http.io.HttpMessageParser extends java.lang.Object Class added: public abstract org.apache.http.io.HttpMessageWriter extends java.lang.Object Class added: public abstract org.apache.http.io.SessionInputBuffer extends java.lang.Object Class added: public abstract org.apache.http.io.SessionOutputBuffer extends java.lang.Object Class added: public org.apache.http.message.BasicHeaderIterator extends java.lang.Object implements org.apache.http.HeaderIterator Class added: public org.apache.http.message.BasicHeaderValueFormatter extends java.lang.Object implements org.apache.http.message.HeaderValueFormatter Class added: public org.apache.http.message.BasicHeaderValueParser extends java.lang.Object implements org.apache.http.message.HeaderValueParser Class added: public org.apache.http.message.BasicLineFormatter extends java.lang.Object implements org.apache.http.message.LineFormatter Class added: public org.apache.http.message.BasicLineParser extends java.lang.Object implements org.apache.http.message.LineParser Class added: public abstract org.apache.http.message.HeaderValueFormatter extends java.lang.Object Class added: public abstract org.apache.http.message.HeaderValueParser extends java.lang.Object Class added: public abstract org.apache.http.message.LineFormatter extends java.lang.Object Class added: public abstract org.apache.http.message.LineParser extends java.lang.Object Class added: public abstract org.apache.http.params.CoreConnectionPNames extends java.lang.Object Class added: public abstract org.apache.http.params.CoreProtocolPNames extends java.lang.Object Class added: public org.apache.http.protocol.BasicHttpContext extends java.lang.Object implements org.apache.http.protocol.HttpContext Class added: public abstract org.apache.http.protocol.ExecutionContext extends java.lang.Object Class added: public org.apache.http.protocol.RequestDate extends java.lang.Object implements org.apache.http.HttpRequestInterceptor Class added: public org.apache.http.protocol.SyncBasicHttpContext extends org.apache.http.protocol.BasicHttpContext Class added: public org.apache.http.util.ListHeaderIterator extends java.lang.Object implements org.apache.http.HeaderIterator Class added: public org.apache.http.util.VersionInfo extends java.lang.Object Class changed: org.apache.http.Header Method changed: old: public abstract org.apache.http.HeaderElement[] getElements(); new: public abstract org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException; Class changed: org.apache.http.HeaderElement Methods added: public abstract org.apache.http.NameValuePair getParameter(int); public abstract int getParameterCount(); Class changed: org.apache.http.HttpHost Fields added: protected final java.lang.String hostname; protected final java.lang.String lcHostname; protected final int port; protected final java.lang.String schemeName; Class changed: org.apache.http.HttpMessage Methods removed: public abstract org.apache.http.HttpVersion getHttpVersion(); public abstract java.util.Iterator headerIterator(); Methods added: public abstract org.apache.http.ProtocolVersion getProtocolVersion(); public abstract org.apache.http.HeaderIterator headerIterator(); public abstract org.apache.http.HeaderIterator headerIterator(java.lang.String); Class changed: org.apache.http.HttpResponse Methods removed: public abstract void setStatusLine(org.apache.http.HttpVersion, int); public abstract void setStatusLine(org.apache.http.HttpVersion, int, java.lang.String); Methods added: public abstract void setStatusLine(org.apache.http.ProtocolVersion, int); public abstract void setStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); Class changed: org.apache.http.HttpResponseFactory Methods removed: public abstract org.apache.http.HttpResponse newHttpResponse(org.apache.http.HttpVersion, int, org.apache.http.protocol.HttpContext); Methods added: public abstract org.apache.http.HttpResponse newHttpResponse(org.apache.http.ProtocolVersion, int, org.apache.http.protocol.HttpContext); Class changed: org.apache.http.HttpVersion Methods removed: public int compareTo(java.lang.Object); public int compareTo(org.apache.http.HttpVersion); public boolean equals(java.lang.Object); public boolean equals(org.apache.http.HttpVersion); public int getMajor(); public int getMinor(); public boolean greaterEquals(org.apache.http.HttpVersion); public int hashCode(); public boolean lessEquals(org.apache.http.HttpVersion); public java.lang.String toString(); Methods added: public org.apache.http.ProtocolVersion forVersion(int, int); Fields added: public final static java.lang.String HTTP = HTTP; Class descriptor changed: old: public final org.apache.http.HttpVersion extends java.lang.Object implements java.lang.Comparable, java.io.Serializable new: public final org.apache.http.HttpVersion extends org.apache.http.ProtocolVersion implements java.io.Serializable Class changed: org.apache.http.RequestLine Methods removed: public abstract org.apache.http.HttpVersion getHttpVersion(); Methods added: public abstract org.apache.http.ProtocolVersion getProtocolVersion(); Class changed: org.apache.http.StatusLine Methods removed: public abstract org.apache.http.HttpVersion getHttpVersion(); Methods added: public abstract org.apache.http.ProtocolVersion getProtocolVersion(); Class changed: org.apache.http.impl.AbstractHttpClientConnection Methods removed: protected void init(org.apache.http.io.HttpDataReceiver, org.apache.http.io.HttpDataTransmitter, org.apache.http.params.HttpParams); protected void readResponseHeaders(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; protected org.apache.http.HttpResponse readResponseStatusLine() throws org.apache.http.HttpException, java.io.IOException; protected void sendRequestHeaders(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException; protected void sendRequestLine(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException; protected static boolean startsWithHTTP(org.apache.http.util.CharArrayBuffer); Methods added: protected org.apache.http.io.HttpMessageWriter createRequestWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams); protected org.apache.http.io.HttpMessageParser createResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); protected void init(org.apache.http.io.SessionInputBuffer, org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.AbstractHttpServerConnection Methods removed: protected void init(org.apache.http.io.HttpDataReceiver, org.apache.http.io.HttpDataTransmitter, org.apache.http.params.HttpParams); protected void receiveRequestHeaders(org.apache.http.HttpRequest) throws org.apache.http.HttpException, java.io.IOException; protected org.apache.http.HttpRequest receiveRequestLine() throws org.apache.http.HttpException, java.io.IOException; protected void sendResponseHeaders(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; protected void sendResponseStatusLine(org.apache.http.HttpResponse) throws org.apache.http.HttpException, java.io.IOException; Methods added: protected org.apache.http.io.HttpMessageParser createRequestParser(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); protected org.apache.http.io.HttpMessageWriter createResponseWriter(org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams); protected void init(org.apache.http.io.SessionInputBuffer, org.apache.http.io.SessionOutputBuffer, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.DefaultHttpResponseFactory Methods removed: public org.apache.http.HttpResponse newHttpResponse(org.apache.http.HttpVersion, int, org.apache.http.protocol.HttpContext); Methods added: public org.apache.http.HttpResponse newHttpResponse(org.apache.http.ProtocolVersion, int, org.apache.http.protocol.HttpContext); Class changed: org.apache.http.impl.SocketHttpClientConnection Methods removed: protected org.apache.http.io.HttpDataReceiver createHttpDataReceiver(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; protected org.apache.http.io.HttpDataTransmitter createHttpDataTransmitter(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; Methods added: protected org.apache.http.io.SessionInputBuffer createSessionInputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; protected org.apache.http.io.SessionOutputBuffer createSessionOutputBuffer(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; Class changed: org.apache.http.impl.SocketHttpServerConnection Methods removed: protected org.apache.http.io.HttpDataReceiver createHttpDataReceiver(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; protected org.apache.http.io.HttpDataTransmitter createHttpDataTransmitter(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; Methods added: protected org.apache.http.io.SessionInputBuffer createHttpDataReceiver(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; protected org.apache.http.io.SessionOutputBuffer createHttpDataTransmitter(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; Class changed: org.apache.http.impl.entity.EntityDeserializer Methods removed: public org.apache.http.HttpEntity deserialize(org.apache.http.io.HttpDataReceiver, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; protected org.apache.http.entity.BasicHttpEntity doDeserialize(org.apache.http.io.HttpDataReceiver, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; Methods added: public org.apache.http.HttpEntity deserialize(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; protected org.apache.http.entity.BasicHttpEntity doDeserialize(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; Class changed: org.apache.http.impl.entity.EntitySerializer Methods removed: protected java.io.OutputStream doSerialize(org.apache.http.io.HttpDataTransmitter, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; public void serialize(org.apache.http.io.HttpDataTransmitter, org.apache.http.HttpMessage, org.apache.http.HttpEntity) throws org.apache.http.HttpException, java.io.IOException; Methods added: protected java.io.OutputStream doSerialize(org.apache.http.io.SessionOutputBuffer, org.apache.http.HttpMessage) throws org.apache.http.HttpException, java.io.IOException; public void serialize(org.apache.http.io.SessionOutputBuffer, org.apache.http.HttpMessage, org.apache.http.HttpEntity) throws org.apache.http.HttpException, java.io.IOException; Class changed: org.apache.http.impl.io.ChunkedInputStream Methods removed: public ChunkedInputStream(org.apache.http.io.HttpDataReceiver); Methods added: public ChunkedInputStream(org.apache.http.io.SessionInputBuffer); Class changed: org.apache.http.impl.io.ChunkedOutputStream Methods removed: public ChunkedOutputStream(org.apache.http.io.HttpDataTransmitter) throws java.io.IOException; public ChunkedOutputStream(org.apache.http.io.HttpDataTransmitter, int) throws java.io.IOException; Methods added: public ChunkedOutputStream(org.apache.http.io.SessionOutputBuffer) throws java.io.IOException; public ChunkedOutputStream(org.apache.http.io.SessionOutputBuffer, int) throws java.io.IOException; Class changed: org.apache.http.impl.io.ContentLengthInputStream Methods removed: public ContentLengthInputStream(org.apache.http.io.HttpDataReceiver, long); Methods added: public ContentLengthInputStream(org.apache.http.io.SessionInputBuffer, long); Class changed: org.apache.http.impl.io.ContentLengthOutputStream Methods removed: public ContentLengthOutputStream(org.apache.http.io.HttpDataTransmitter, long); Methods added: public ContentLengthOutputStream(org.apache.http.io.SessionOutputBuffer, long); Class changed: org.apache.http.impl.io.IdentityOutputStream Methods removed: public IdentityOutputStream(org.apache.http.io.HttpDataTransmitter); Methods added: public IdentityOutputStream(org.apache.http.io.SessionOutputBuffer); Class changed: org.apache.http.message.AbstractHttpMessage Methods removed: public java.util.Iterator headerIterator(); Methods added: public org.apache.http.HeaderIterator headerIterator(); public org.apache.http.HeaderIterator headerIterator(java.lang.String); Class changed: org.apache.http.message.BasicHeader Methods removed: public static java.lang.String format(org.apache.http.Header); public static void format(org.apache.http.util.CharArrayBuffer, org.apache.http.Header); Method changed: old: public org.apache.http.HeaderElement[] getElements(); new: public org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException; Class changed: org.apache.http.message.BasicHeaderElement Methods removed: public static java.lang.String format(org.apache.http.HeaderElement); public static void format(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement); public static void formatAll(org.apache.http.util.CharArrayBuffer, org.apache.http.HeaderElement[]); public static java.lang.String formatAll(org.apache.http.HeaderElement[]); public final static org.apache.http.HeaderElement parse(java.lang.String); public static org.apache.http.HeaderElement parse(org.apache.http.util.CharArrayBuffer, int, int); public final static org.apache.http.HeaderElement[] parseAll(java.lang.String); public final static org.apache.http.HeaderElement[] parseAll(org.apache.http.util.CharArrayBuffer, int, int); Methods added: public BasicHeaderElement(org.apache.http.NameValuePair[]); public org.apache.http.NameValuePair getParameter(int); public int getParameterCount(); Class changed: org.apache.http.message.BasicHttpRequest Methods removed: public BasicHttpRequest(java.lang.String, java.lang.String, org.apache.http.HttpVersion); public org.apache.http.HttpVersion getHttpVersion(); Methods added: public BasicHttpRequest(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); public org.apache.http.ProtocolVersion getProtocolVersion(); Class changed: org.apache.http.message.BasicHttpResponse Methods removed: public BasicHttpResponse(org.apache.http.HttpVersion, int, java.lang.String); public org.apache.http.HttpVersion getHttpVersion(); public void setStatusLine(org.apache.http.HttpVersion, int); public void setStatusLine(org.apache.http.HttpVersion, int, java.lang.String); Methods added: public BasicHttpResponse(org.apache.http.ProtocolVersion, int, java.lang.String); public org.apache.http.ProtocolVersion getProtocolVersion(); public void setStatusLine(org.apache.http.ProtocolVersion, int); public void setStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); Class changed: org.apache.http.message.BasicNameValuePair Methods removed: public static java.lang.String format(org.apache.http.NameValuePair, boolean); public static void format(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair, boolean); public static void formatAll(org.apache.http.util.CharArrayBuffer, org.apache.http.NameValuePair[], boolean); public static java.lang.String formatAll(org.apache.http.NameValuePair[], boolean); public final static org.apache.http.NameValuePair parse(java.lang.String); public static org.apache.http.NameValuePair parse(org.apache.http.util.CharArrayBuffer, int, int); public final static org.apache.http.NameValuePair[] parseAll(java.lang.String); public final static org.apache.http.NameValuePair[] parseAll(org.apache.http.util.CharArrayBuffer, int, int); Class changed: org.apache.http.message.BasicRequestLine Methods removed: public BasicRequestLine(java.lang.String, java.lang.String, org.apache.http.HttpVersion); public static java.lang.String format(org.apache.http.RequestLine); public static void format(org.apache.http.util.CharArrayBuffer, org.apache.http.RequestLine); public org.apache.http.HttpVersion getHttpVersion(); public final static org.apache.http.RequestLine parse(java.lang.String) throws org.apache.http.ProtocolException; public static org.apache.http.RequestLine parse(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ProtocolException; Methods added: public BasicRequestLine(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); public org.apache.http.ProtocolVersion getProtocolVersion(); Class changed: org.apache.http.message.BasicStatusLine Methods removed: public BasicStatusLine(org.apache.http.HttpVersion, int, java.lang.String); public static java.lang.String format(org.apache.http.StatusLine); public static void format(org.apache.http.util.CharArrayBuffer, org.apache.http.StatusLine); public org.apache.http.HttpVersion getHttpVersion(); public final static org.apache.http.StatusLine parse(java.lang.String) throws org.apache.http.ProtocolException; public static org.apache.http.StatusLine parse(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ProtocolException; Methods added: public BasicStatusLine(org.apache.http.ProtocolVersion, int, java.lang.String); public org.apache.http.ProtocolVersion getProtocolVersion(); Class changed: org.apache.http.message.BufferedHeader Methods added: public BufferedHeader(org.apache.http.util.CharArrayBuffer, org.apache.http.message.HeaderValueParser) throws org.apache.http.ParseException; public org.apache.http.message.HeaderValueParser getParser(); public void setParser(org.apache.http.message.HeaderValueParser); Class descriptor changed: old: public org.apache.http.message.BufferedHeader extends java.lang.Object implements org.apache.http.Header new: public org.apache.http.message.BufferedHeader extends java.lang.Object implements org.apache.http.FormattedHeader Method changed: old: public BufferedHeader(org.apache.http.util.CharArrayBuffer); new: public BufferedHeader(org.apache.http.util.CharArrayBuffer) throws org.apache.http.ParseException; Method changed: old: public org.apache.http.HeaderElement[] getElements(); new: public org.apache.http.HeaderElement[] getElements() throws org.apache.http.ParseException; Class changed: org.apache.http.params.HttpConnectionParams Fields removed: public final static java.lang.String CONNECTION_TIMEOUT = http.connection.timeout; public final static java.lang.String MAX_HEADER_COUNT = http.connection.max-header-count; public final static java.lang.String MAX_LINE_LENGTH = http.connection.max-line-length; public final static java.lang.String MAX_STATUS_LINE_GARBAGE = http.connection.max-status-line-garbage; public final static java.lang.String SOCKET_BUFFER_SIZE = http.socket.buffer-size; public final static java.lang.String SO_LINGER = http.socket.linger; public final static java.lang.String SO_TIMEOUT = http.socket.timeout; public final static java.lang.String STALE_CONNECTION_CHECK = http.connection.stalecheck; public final static java.lang.String TCP_NODELAY = http.tcp.nodelay; Class descriptor changed: old: public final org.apache.http.params.HttpConnectionParams extends java.lang.Object new: public final org.apache.http.params.HttpConnectionParams extends java.lang.Object implements org.apache.http.params.CoreConnectionPNames Class changed: org.apache.http.params.HttpProtocolParams Methods removed: public static org.apache.http.HttpVersion getVersion(org.apache.http.params.HttpParams); public static void setVersion(org.apache.http.params.HttpParams, org.apache.http.HttpVersion); Methods added: public static org.apache.http.ProtocolVersion getVersion(org.apache.http.params.HttpParams); public static void setVersion(org.apache.http.params.HttpParams, org.apache.http.ProtocolVersion); Fields removed: public final static java.lang.String HTTP_CONTENT_CHARSET = http.protocol.content-charset; public final static java.lang.String HTTP_ELEMENT_CHARSET = http.protocol.element-charset; public final static java.lang.String ORIGIN_SERVER = http.origin-server; public final static java.lang.String PROTOCOL_VERSION = http.protocol.version; public final static java.lang.String STRICT_TRANSFER_ENCODING = http.protocol.strict-transfer-encoding; public final static java.lang.String USER_AGENT = http.useragent; public final static java.lang.String USE_EXPECT_CONTINUE = http.protocol.expect-continue; public final static java.lang.String WAIT_FOR_CONTINUE = http.protocol.wait-for-continue; Class descriptor changed: old: public final org.apache.http.params.HttpProtocolParams extends java.lang.Object new: public final org.apache.http.params.HttpProtocolParams extends java.lang.Object implements org.apache.http.params.CoreProtocolPNames Class changed: org.apache.http.protocol.BasicHttpProcessor Methods added: public final void addInterceptor(org.apache.http.HttpRequestInterceptor, int); public final void addInterceptor(org.apache.http.HttpResponseInterceptor, int); public void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int); public void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int); public void removeRequestInterceptorByClass(java.lang.Class); public void removeResponseInterceptorByClass(java.lang.Class); Fields added: protected java.util.List requestInterceptors; protected java.util.List responseInterceptors; Class changed: org.apache.http.protocol.HTTP Fields removed: public final static java.lang.String DATE_DIRECTIVE = Date; public final static java.lang.String SERVER_DIRECTIVE = Server; Fields added: public final static java.lang.String DATE_HEADER = Date; public final static java.lang.String SERVER_HEADER = Server; Class changed: org.apache.http.protocol.HttpContext Fields removed: public final static java.lang.String HTTP_CONNECTION = http.connection; public final static java.lang.String HTTP_REQUEST = http.request; public final static java.lang.String HTTP_RESPONSE = http.response; Class changed: org.apache.http.protocol.HttpRequestInterceptorList Methods added: public abstract void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int); public abstract void removeRequestInterceptorByClass(java.lang.Class); Class changed: org.apache.http.protocol.HttpResponseInterceptorList Methods added: public abstract void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int); public abstract void removeResponseInterceptorByClass(java.lang.Class); Class changed: org.apache.http.util.EntityUtils Method changed: old: public static java.lang.String getContentCharSet(org.apache.http.HttpEntity); new: public static java.lang.String getContentCharSet(org.apache.http.HttpEntity) throws org.apache.http.ParseException; Method changed: old: public static java.lang.String toString(org.apache.http.HttpEntity) throws java.io.IOException; new: public static java.lang.String toString(org.apache.http.HttpEntity) throws java.io.IOException, org.apache.http.ParseException; Method changed: old: public static java.lang.String toString(org.apache.http.HttpEntity, java.lang.String) throws java.io.IOException; new: public static java.lang.String toString(org.apache.http.HttpEntity, java.lang.String) throws java.io.IOException, org.apache.http.ParseException; Class changed: org.apache.http.util.HeaderGroup Methods removed: public java.util.Iterator iterator(); Methods added: public org.apache.http.HeaderIterator iterator(); public org.apache.http.HeaderIterator iterator(java.lang.String); API diff generated by JarDiff http://www.osjava.org/jardiff/ HttpCore NIO API changes (generated by JarDiff 0.2) -------------------------------------- Class removed: public abstract org.apache.http.impl.nio.codecs.HttpMessageParser extends java.lang.Object Class removed: public org.apache.http.impl.nio.reactor.SessionInputBuffer extends org.apache.http.nio.util.ExpandableBuffer Class removed: public org.apache.http.impl.nio.reactor.SessionOutputBuffer extends org.apache.http.nio.util.ExpandableBuffer Class removed: public final org.apache.http.nio.params.HttpNIOParams extends java.lang.Object Class added: public abstract org.apache.http.impl.nio.codecs.AbstractMessageParser extends java.lang.Object implements org.apache.http.nio.NHttpMessageParser Class added: public abstract org.apache.http.impl.nio.codecs.AbstractMessageWriter extends java.lang.Object implements org.apache.http.nio.NHttpMessageWriter Class added: public org.apache.http.impl.nio.codecs.HttpRequestWriter extends org.apache.http.impl.nio.codecs.AbstractMessageWriter Class added: public org.apache.http.impl.nio.codecs.HttpResponseWriter extends org.apache.http.impl.nio.codecs.AbstractMessageWriter Class added: public org.apache.http.impl.nio.reactor.SessionInputBufferImpl extends org.apache.http.nio.util.ExpandableBuffer implements org.apache.http.nio.reactor.SessionInputBuffer Class added: public org.apache.http.impl.nio.reactor.SessionOutputBufferImpl extends org.apache.http.nio.util.ExpandableBuffer implements org.apache.http.nio.reactor.SessionOutputBuffer Class added: public abstract org.apache.http.nio.NHttpMessageParser extends java.lang.Object Class added: public abstract org.apache.http.nio.NHttpMessageWriter extends java.lang.Object Class added: public abstract org.apache.http.nio.params.NIOReactorPNames extends java.lang.Object Class added: public final org.apache.http.nio.params.NIOReactorParams extends java.lang.Object implements org.apache.http.nio.params.NIOReactorPNames Class added: public abstract org.apache.http.nio.reactor.SessionInputBuffer extends java.lang.Object Class added: public abstract org.apache.http.nio.reactor.SessionOutputBuffer extends java.lang.Object Class changed: org.apache.http.impl.nio.DefaultNHttpClientConnection Methods added: protected org.apache.http.nio.NHttpMessageWriter createRequestWriter(org.apache.http.nio.reactor.SessionOutputBuffer, org.apache.http.params.HttpParams); protected org.apache.http.nio.NHttpMessageParser createResponseParser(org.apache.http.nio.reactor.SessionInputBuffer, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.nio.DefaultNHttpServerConnection Methods added: protected org.apache.http.nio.NHttpMessageParser createRequestParser(org.apache.http.nio.reactor.SessionInputBuffer, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); protected org.apache.http.nio.NHttpMessageWriter createResponseWriter(org.apache.http.nio.reactor.SessionOutputBuffer, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.nio.NHttpConnectionBase Methods added: public int getStatus(); Fields removed: protected volatile boolean closed; protected final org.apache.http.util.CharArrayBuffer lineBuffer; protected final org.apache.http.impl.HttpConnectionMetricsImpl metrics; Fields added: protected final org.apache.http.impl.HttpConnectionMetricsImpl connMetrics; protected final org.apache.http.impl.io.HttpTransportMetricsImpl inTransportMetrics; protected final org.apache.http.impl.io.HttpTransportMetricsImpl outTransportMetrics; protected volatile int status; Class changed: org.apache.http.impl.nio.codecs.AbstractContentDecoder Methods removed: public AbstractContentDecoder(java.nio.channels.ReadableByteChannel, org.apache.http.impl.nio.reactor.SessionInputBuffer); Methods added: public AbstractContentDecoder(java.nio.channels.ReadableByteChannel, org.apache.http.nio.reactor.SessionInputBuffer, org.apache.http.impl.io.HttpTransportMetricsImpl); Fields added: protected final org.apache.http.impl.io.HttpTransportMetricsImpl metrics; Class changed: org.apache.http.impl.nio.codecs.AbstractContentEncoder Methods removed: public AbstractContentEncoder(); Methods added: public AbstractContentEncoder(java.nio.channels.WritableByteChannel, org.apache.http.nio.reactor.SessionOutputBuffer, org.apache.http.impl.io.HttpTransportMetricsImpl); Fields added: protected final org.apache.http.nio.reactor.SessionOutputBuffer buffer; protected final java.nio.channels.WritableByteChannel channel; protected final org.apache.http.impl.io.HttpTransportMetricsImpl metrics; Class changed: org.apache.http.impl.nio.codecs.ChunkDecoder Methods removed: public ChunkDecoder(java.nio.channels.ReadableByteChannel, org.apache.http.impl.nio.reactor.SessionInputBuffer); Methods added: public ChunkDecoder(java.nio.channels.ReadableByteChannel, org.apache.http.nio.reactor.SessionInputBuffer, org.apache.http.impl.io.HttpTransportMetricsImpl); Class changed: org.apache.http.impl.nio.codecs.ChunkEncoder Methods removed: public ChunkEncoder(org.apache.http.impl.nio.reactor.SessionOutputBuffer); Methods added: public ChunkEncoder(java.nio.channels.WritableByteChannel, org.apache.http.nio.reactor.SessionOutputBuffer, org.apache.http.impl.io.HttpTransportMetricsImpl); Class changed: org.apache.http.impl.nio.codecs.HttpRequestParser Methods removed: public HttpRequestParser(org.apache.http.impl.nio.reactor.SessionInputBuffer, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); Methods added: public HttpRequestParser(org.apache.http.nio.reactor.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); Class descriptor changed: old: public org.apache.http.impl.nio.codecs.HttpRequestParser extends org.apache.http.impl.nio.codecs.HttpMessageParser new: public org.apache.http.impl.nio.codecs.HttpRequestParser extends org.apache.http.impl.nio.codecs.AbstractMessageParser Method changed: old: protected org.apache.http.HttpMessage createMessage(org.apache.http.util.CharArrayBuffer) throws org.apache.http.HttpException; new: protected org.apache.http.HttpMessage createMessage(org.apache.http.util.CharArrayBuffer) throws org.apache.http.HttpException, org.apache.http.ParseException; Class changed: org.apache.http.impl.nio.codecs.HttpResponseParser Methods removed: public HttpResponseParser(org.apache.http.impl.nio.reactor.SessionInputBuffer, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); Methods added: public HttpResponseParser(org.apache.http.nio.reactor.SessionInputBuffer, org.apache.http.message.LineParser, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); Class descriptor changed: old: public org.apache.http.impl.nio.codecs.HttpResponseParser extends org.apache.http.impl.nio.codecs.HttpMessageParser new: public org.apache.http.impl.nio.codecs.HttpResponseParser extends org.apache.http.impl.nio.codecs.AbstractMessageParser Method changed: old: protected org.apache.http.HttpMessage createMessage(org.apache.http.util.CharArrayBuffer) throws org.apache.http.HttpException; new: protected org.apache.http.HttpMessage createMessage(org.apache.http.util.CharArrayBuffer) throws org.apache.http.HttpException, org.apache.http.ParseException; Class changed: org.apache.http.impl.nio.codecs.IdentityDecoder Methods removed: public IdentityDecoder(java.nio.channels.ReadableByteChannel, org.apache.http.impl.nio.reactor.SessionInputBuffer); Methods added: public IdentityDecoder(java.nio.channels.ReadableByteChannel, org.apache.http.nio.reactor.SessionInputBuffer, org.apache.http.impl.io.HttpTransportMetricsImpl); Class changed: org.apache.http.impl.nio.codecs.IdentityEncoder Methods removed: public IdentityEncoder(java.nio.channels.WritableByteChannel); Methods added: public IdentityEncoder(java.nio.channels.WritableByteChannel, org.apache.http.nio.reactor.SessionOutputBuffer, org.apache.http.impl.io.HttpTransportMetricsImpl); Class changed: org.apache.http.impl.nio.codecs.LengthDelimitedDecoder Methods removed: public LengthDelimitedDecoder(java.nio.channels.ReadableByteChannel, org.apache.http.impl.nio.reactor.SessionInputBuffer, long); Methods added: public LengthDelimitedDecoder(java.nio.channels.ReadableByteChannel, org.apache.http.nio.reactor.SessionInputBuffer, org.apache.http.impl.io.HttpTransportMetricsImpl, long); Class changed: org.apache.http.impl.nio.codecs.LengthDelimitedEncoder Methods removed: public LengthDelimitedEncoder(java.nio.channels.WritableByteChannel, long); Methods added: public LengthDelimitedEncoder(java.nio.channels.WritableByteChannel, org.apache.http.nio.reactor.SessionOutputBuffer, org.apache.http.impl.io.HttpTransportMetricsImpl, long); Class changed: org.apache.http.impl.nio.reactor.AbstractIOReactor Methods added: public void awaitShutdown(long) throws java.lang.InterruptedException; protected void closeChannels() throws org.apache.http.nio.reactor.IOReactorException; protected void closeSessions(); public int getStatus(); public void gracefulShutdown(); public void hardShutdown() throws org.apache.http.nio.reactor.IOReactorException; protected void processEvent(java.nio.channels.SelectionKey); public void shutdown(long) throws org.apache.http.nio.reactor.IOReactorException; Class changed: org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor Methods removed: public AbstractMultiworkerIOReactor(long, int, org.apache.http.util.concurrent.ThreadFactory) throws org.apache.http.nio.reactor.IOReactorException; protected long getSelectTimeout(); protected void startWorkers(org.apache.http.nio.reactor.IOEventDispatch); protected void stopWorkers(int) throws java.io.InterruptedIOException, org.apache.http.nio.reactor.IOReactorException; protected void verifyWorkers() throws java.io.InterruptedIOException, org.apache.http.nio.reactor.IOReactorException; Methods added: public AbstractMultiworkerIOReactor(int, org.apache.http.util.concurrent.ThreadFactory, org.apache.http.params.HttpParams) throws org.apache.http.nio.reactor.IOReactorException; public void execute(org.apache.http.nio.reactor.IOEventDispatch) throws java.io.InterruptedIOException, org.apache.http.nio.reactor.IOReactorException; public int getStatus(); protected void prepareSocket(java.net.Socket) throws java.io.IOException; protected abstract void processEvents(int) throws org.apache.http.nio.reactor.IOReactorException; protected java.nio.channels.SelectionKey registerChannel(java.nio.channels.SelectableChannel, int) throws java.nio.channels.ClosedChannelException; public void setExceptionHandler(org.apache.http.nio.reactor.IOReactorExceptionHandler); public void shutdown() throws java.io.IOException; public void shutdown(long) throws java.io.IOException; Fields added: protected org.apache.http.nio.reactor.IOReactorExceptionHandler exceptionHandler; protected final org.apache.http.params.HttpParams params; protected final long selectTimeout; protected final java.nio.channels.Selector selector; protected volatile int status; Class changed: org.apache.http.impl.nio.reactor.BaseIOReactor Methods added: protected void processEvent(java.nio.channels.SelectionKey); public void setExceptionHandler(org.apache.http.nio.reactor.IOReactorExceptionHandler); Class changed: org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor Methods removed: public void execute(org.apache.http.nio.reactor.IOEventDispatch) throws java.io.InterruptedIOException, org.apache.http.nio.reactor.IOReactorException; protected void prepareSocket(java.net.Socket) throws java.io.IOException; public void shutdown() throws java.io.IOException; Methods added: protected void processEvents(int) throws org.apache.http.nio.reactor.IOReactorException; Class changed: org.apache.http.impl.nio.reactor.DefaultListeningIOReactor Methods removed: public void execute(org.apache.http.nio.reactor.IOEventDispatch) throws java.io.InterruptedIOException, org.apache.http.nio.reactor.IOReactorException; protected void prepareSocket(java.net.Socket) throws java.io.IOException; public void setExceptionHandler(org.apache.http.nio.reactor.IOReactorExceptionHandler); public void shutdown() throws java.io.IOException; Methods added: protected void processEvents(int) throws org.apache.http.nio.reactor.IOReactorException; Class changed: org.apache.http.impl.nio.reactor.IOSessionImpl Methods added: public int getStatus(); Class changed: org.apache.http.impl.nio.reactor.SessionSet Method changed: old: public void add(org.apache.http.nio.reactor.IOSession); new: public synchronized void add(org.apache.http.nio.reactor.IOSession); Method changed: old: public void clear(); new: public synchronized void clear(); Method changed: old: public boolean isEmpty(); new: public synchronized boolean isEmpty(); Method changed: old: public boolean remove(org.apache.http.nio.reactor.IOSession); new: public synchronized boolean remove(org.apache.http.nio.reactor.IOSession); Class changed: org.apache.http.nio.NHttpConnection Methods added: public abstract int getStatus(); Fields added: public final static int ACTIVE = 0; public final static int CLOSED = 2; public final static int CLOSING = 1; Class changed: org.apache.http.nio.protocol.HttpRequestExecutionHandler Methods added: public abstract void finalizeContext(org.apache.http.protocol.HttpContext); Class changed: org.apache.http.nio.protocol.NHttpHandlerBase Methods added: protected void handleTimeout(org.apache.http.nio.NHttpConnection); Class changed: org.apache.http.nio.reactor.IOReactor Methods added: public abstract int getStatus(); public abstract void shutdown(long) throws java.io.IOException; Fields added: public final static int ACTIVE = 1; public final static int INACTIVE = 0; public final static int SHUTTING_DOWN = 2; public final static int SHUT_DOWN = 3; Class changed: org.apache.http.nio.reactor.IOReactorExceptionHandler Methods added: public abstract boolean handle(java.lang.RuntimeException); Class changed: org.apache.http.nio.reactor.IOSession Methods added: public abstract int getStatus(); Fields added: public final static int ACTIVE = 0; public final static int CLOSED = 2147483647; public final static int CLOSING = 1; API diff generated by JarDiff http://www.osjava.org/jardiff/ HttpCore NIOSSL API changes (generated by JarDiff 0.2) -------------------------------------- Class changed: org.apache.http.impl.nio.reactor.SSLIOSession Methods added: public int getStatus(); API diff generated by JarDiff http://www.osjava.org/jardiff/ Release 4.0 Alpha 5 ------------------- The fifth ALPHA version of HttpComponents Core has been released. This release delivers a number of incremental improvements across the board in all modules and adds several performance oriented features such as ability to transfer data directly between a file and a socket channels. HttpCore is almost fully feature complete now and we are likely to freeze the public APIs as of next release (BETA1). * [HTTPCORE-87] RuntimeExcpetions thrown in I/O worker threads are now correctly propagated to the I/O reactor. Contributed by Oleg Kalnichevski * [HTTPCORE-84]: Removed DateUtils/DateParseException from core. Contributed by Roland Weber * [HTTPCORE-63]: Made I/O select interval configurable for all default I/O reactor implementations. Contributed by Oleg Kalnichevski and Anders Wallgren * [HTTPCORE-82]: Revised linking of HttpParams to reduce potential for misuse. Method #setDefaults() removed from the HttpParams interface. Contributed by Roland Weber * [HTTPCORE-81]: Maximum line length and maximum header counts parameters are now correctly enforced in both base and NIO modules. Fixed maximum line length check when parsing folded header lines. Contributed by Steffen Pingel * Added HTTP client handler implementation that allocates fixed size content buffers upon initialization and is capable of throttling the rate of I/O events in order to make sure those content buffers do not get overflown. Contributed by Oleg Kalnichevski * [HTTPCORE-76]: Added IOSession#shutdown() method intended to force-close I/O sessions (primarily needed to terminate hung SSL connections). Contributed by Sandeep Tamhankar * [HTTPCORE-78]: Added ByteBufferAllocator interface that can be used to apply different ByteArray allocation strategies to session and content buffers. Use heap bound implementation for short-lived or variable in length (requiring frequent content re-allocation) buffers. Contributed by Steffen Pingel * [HTTPCORE-77]: The result of CharsetDecoder#decode() and CharsetEncoder#encode() was not checked for errors resulting in an infinite loop in SessionInputBuffer#readLine() and SessionOutputBuffer#writeLine() when malformed characters were processed. Contributed by Steffen Pingel * [HTTPCORE-71]: HttpParams can be copied. Contributed by Roland Weber * [HTTPCORE-75]: DefaultNHttpServerConnection and DefaultNHttpClientConnection now correctly terminate the underlying I/O session when closed. BufferingHttpServiceHandler now correctly applies connection keep-alive strategy when sending a response with no content body. Contributed by Steffen Pingel * [HTTPCORE-73]: Fixed bug preventing NHttpServiceHandler#responseReady and NHttpClientHandler#requestReady events from being fired if the HTTP message has no content body. Contributed by Steffen Pingel * [HTTPCORE-67]: Improved event listener interface Contributed by Oleg Kalnichevski * [HTTPCORE-43]: Support for FileChannel#transferFrom() and FileChannel#transferTo() methods. Direct coping from and to FileChannel is expected to improve performance of file bound operations Contributed by Andrea Selva * [HTTPCORE-66]: Fixed handling of HTTP HEAD methods Contributed by Steffen Pingel and Oleg Kalnichevski * [HTTPCORE-58]: NIO HTTP connections changed to throw checked ConnectionClosedException instead of unchecked IllegalStateException when an attempt is made to perform an I/O operation on a closed conection Contributed by Oleg Kalnichevski * [HTTPCORE-56]: DefaultConnectingIOReactor no longer terminates due to a CancelledKeyException, if a session request gets canceled before selection key is fully initialized. Contributed by Oleg Kalnichevski Release 4.0 Alpha 4 ------------------- The forth ALPHA version of HttpComponents Core has been released. The ALPHA4 release fixes a number of bugs and adds a number of improvements to HttpCore base and HttpCore NIO extensions. HttpCore NIO can be used to build HTTP services intended to handle thousands of simultaneous connections with a small number of I/O threads. This release also introduces NIOSSL extensions that can be used to extend HttpCore non-blocking transport components with ability to transparently encrypt data in transit using SSL/TLS protocol. * [HTTPCORE-49]: DefaultConnectingIOReactor can now correctly handle unresolved socket addresses. It no longer terminates with the UnresolvedAddressException runtime exception. Contributed by Oleg Kalnichevski * [HTTPCORE-42]: Added server side API for the expectation verification. Improved support for the 'expect: continue' handshake in HttpCore and HttpCore NIO. Contributed by Oleg Kalnichevski * [HTTPCORE-26]: Added SSL support for HttpCore NIO. Contributed by Oleg Kalnichevski * [HTTPCORE-40]: API classes no longer reference impl classes in module-main. Contributed by Roland Weber * [HTTPCORE-39]: Refactored HttpStatus, spun off [English]ReasonPhraseFactory. Contributed by Roland Weber * [HTTPCORE-32]: HttpRequestInterceptorList, HttpResponseInterceptorList Contributed by Roland Weber * [HTTPCORE-38]: Packages nio.impl.* are now impl.nio.*, same for examples. Contributed by Roland Weber * [HTTPCORE-27]: I/O reactors can now accept a thread factory as an optional parameter. Contributed by Oleg Kalnichevski * [HTTPCORE-36]: Fixed #setHandlers() method and matching of request URIs with a query part in HttpRequestHandlerRegistry Contributed by Oleg Kalnichevski * [HTTPCORE-28]: DefaultConnectingIOReactor now maintains a queue of connect requests and registers new sessions with the selector on the I/O thread. Contributed by Oleg Kalnichevski * [HTTPCORE-29] DefaultConnectingIOReactor changed to ensure IOExceptions are correctly propagated to the caller, if an exception is thrown while initializing a newly connected socket. Contributed by Oleg Kalnichevski * [HTTPCORE-24] Fixed bug in non-blocking connection implementations, which prevented the session buffer from being correctly flushed when the content coding process has been completed. Contributed by Oleg Kalnichevski * [HTTPCORE-23] Fixed threading bug in DefaultConnectingIOReactor. Contributed by Asankha C. Perera Release 4.0 Alpha 3 ------------------- The third ALPHA version of HttpCore has been released. The ALPHA3 release includes a number of API optimizations and improvements and introduces a set of NIO extensions to the HttpCore API. NIO extensions can be used to build HTTP services intended to handle thousands of simultaneous connections with a small number of I/O threads. * [HTTPCORE-15] Provided a interafce to access IP address of the local and remote end points. Contributed by Oleg Kalnichevski * [ HTTPCORE-14] Scheme, SocketFactory and SecureSocketFactory moved to HttpClient. Decoupled HttpHost and Scheme. Contributed by Oleg Kalnichevski * [HTTPCORE-13] Refactored HttpProcessor interface and related impl classes Contributed by Roland Weber * [HTTPCORE-11] Client connection interface no longer defines a specific method to open a connection. HTTP connections can now represent any abstract I/O transport such as those based on NIO API. Contributed by Oleg Kalnichevski * [HTTPCORE-10] Non-blocking (async) client side I/O transport based on NIO. Contributed by Oleg Kalnichevski * [HTTPCORE-9] Non-blocking (async) server side I/O transport based on NIO. Contributed by Oleg Kalnichevski * [HTTPCORE-7] ConnectionReuseStrategy interface changed to allow access to the HTTP execution context. Contributed by Roland Weber * [HTTPCORE-6] Header implementation allowing for performance short-cuts when serializing and deserializing HTTP headers. Contributed by Oleg Kalnichevski * [HTTPCORE-5] Header, HeaderElement, NameValuePair, RequestLine, StatusLine, HttpVersion changed to interfaces. API no longer contains any parsing and formatting code and does not imply any specific physical representation of HTTP messages and their elements. Contributed by Oleg Kalnichevski Release 4.0 Alpha 2 ------------------- This is a maintenance release that mostly fixes minor problems found since the previous release. The upstream projects are strongly encouraged use this release as a dependency while HttpCore undergoes another round of reviews and optimization in the SVN trunk Changelog: --------- * [HTTPCORE-4] optional header and line length limits to contain OOME risks Contributed by Oleg Kalnichevski Release 4.0 Alpha 1 ------------------- This release represents a complete redesign of the Jakarta Commons HttpClient 3.x API and a significant rewrite of the core HTTP components derived from HttpClient 3.0 code base. These components will form the foundation of the future releases of Jakarta HttpClient and can also be used separately to build custom client- and server-side HTTP services.