Release 4.0 Beta 1 ------------------- The first BETA version of HttpComponents Core has been released. This release can be considered a major milestone, as it marks the end of API instability in HttpCore. As of this release the API compatibility between minor releases in 4.x codeline will be maintained. This release includes several major improvements such as enhanced HTTP message parsing API and optimized parser implementations, Java 5.0 compatibility for HttpCore NIO extensions. Upstream projects are strongly encouraged to upgrade to the latest release. The focus of the development efforts will be gradually shifting towards providing better test coverage, documentation and performance optimizations. Changelog: ---------- * [HTTPCORE-141] Session request timeout in DefaultConnectingIOReactor invalidates the request. Contributed by Oleg Kalnichevski * [HTTPCORE-137] DefaultHttpRequestFactory extended to support all methods specified in RFC 2616 (except CONNECT). Contributed by Oleg Kalnichevski * Replaced HTTP parameter linking with a simple child/parent stack. Contributed by Oleg Kalnichevski * [HTTPCORE-134] all serialVersionUID attributes are private Contributed by Roland Weber * [HTTPCORE-133] Clone support for basic HTTP message elements and non-streaming entities. Contributed by Oleg Kalnichevski * [HTTPCORE-127] Improved API for lifecycle management of listening I/O reactors. One can now suspend and resume listener endpoints. Contributed by Asankha C. Perera * [HTTPCORE-112] DefaultConnectionReuseStrategy interprets token sequences Contributed by Roland Weber * [HTTPCORE-122] new interface TokenIterator and basic implementation Contributed by Roland Weber * HttpCore NIOSSL classes moved to HttpCore NIO. Contributed by Oleg Kalnichevski * HttpCore NIO ported to Java 1.5. Contributed by Oleg Kalnichevski * [HTTPCORE-130] Fixed over-synchronization bug leading to a thread deadlock condition in SSL IOEventDispatch implementations. Contributed by Oleg Kalnichevski * [HTTPCORE-37] HttpParams beans Contributed by Stojce Dimski * [HTTPCORE-128] Simplified injection of custom NIO connection implementations. Contributed by Oleg Kalnichevski * [HTTPCORE-126] Improved HTTP message parsing API and optimized parser implementations. Contributed by Oleg Kalnichevski * Do not include "Connection: close" to 500 responses per default. Contributed by Oleg Kalnichevski * [HTTPCORE-121] new interface HeaderElementIterator Contributed by Andrea Selva * [HTTPCORE-123] Fixed problem with SSLSession losing buffered data, if the connection has been closed by the peer. Contributed by Risto ReinpƵld HttpCore API changes (generated by JarDiff 0.2) -------------------------------------- Class removed: public abstract org.apache.http.params.HttpLinkedParams extends java.lang.Object implements org.apache.http.params.HttpParams Class removed: public org.apache.http.params.HttpParamsLinker extends java.lang.Object Class removed: public org.apache.http.util.HeaderGroup extends java.lang.Object Class removed: public org.apache.http.util.ListHeaderIterator extends java.lang.Object implements org.apache.http.HeaderIterator Class removed: public abstract org.apache.http.util.concurrent.Executor extends java.lang.Object Class removed: public abstract org.apache.http.util.concurrent.ThreadFactory extends java.lang.Object Class added: public abstract org.apache.http.HeaderElementIterator extends java.lang.Object implements java.util.Iterator Class added: public abstract org.apache.http.TokenIterator extends java.lang.Object implements java.util.Iterator Class added: public org.apache.http.message.BasicHeaderElementIterator extends java.lang.Object implements org.apache.http.HeaderElementIterator Class added: public org.apache.http.message.BasicListHeaderIterator extends java.lang.Object implements org.apache.http.HeaderIterator Class added: public org.apache.http.message.BasicTokenIterator extends java.lang.Object implements org.apache.http.TokenIterator Class added: public org.apache.http.message.HeaderGroup extends java.lang.Object implements java.lang.Cloneable Class added: public org.apache.http.message.ParserCursor extends java.lang.Object Class added: public final org.apache.http.params.DefaultedHttpParams extends org.apache.http.params.AbstractHttpParams Class added: public abstract org.apache.http.params.HttpAbstractParamBean extends java.lang.Object Class added: public org.apache.http.params.HttpConnectionParamBean extends org.apache.http.params.HttpAbstractParamBean Class added: public org.apache.http.params.HttpProtocolParamBean extends org.apache.http.params.HttpAbstractParamBean Class changed: org.apache.http.HttpHost Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Class descriptor changed: old: public org.apache.http.HttpHost extends java.lang.Object new: public final org.apache.http.HttpHost extends java.lang.Object implements java.lang.Cloneable Class changed: org.apache.http.ProtocolVersion Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Class descriptor changed: old: public org.apache.http.ProtocolVersion extends java.lang.Object implements java.io.Serializable new: public org.apache.http.ProtocolVersion extends java.lang.Object implements java.io.Serializable, java.lang.Cloneable Class changed: org.apache.http.entity.ByteArrayEntity Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Fields added: protected final byte[] content; Class descriptor changed: old: public org.apache.http.entity.ByteArrayEntity extends org.apache.http.entity.AbstractHttpEntity new: public org.apache.http.entity.ByteArrayEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable Class changed: org.apache.http.entity.FileEntity Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Fields added: protected final java.io.File file; Class descriptor changed: old: public org.apache.http.entity.FileEntity extends org.apache.http.entity.AbstractHttpEntity new: public org.apache.http.entity.FileEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable Class changed: org.apache.http.entity.StringEntity Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Fields added: protected final byte[] content; Class descriptor changed: old: public org.apache.http.entity.StringEntity extends org.apache.http.entity.AbstractHttpEntity new: public org.apache.http.entity.StringEntity extends org.apache.http.entity.AbstractHttpEntity implements java.lang.Cloneable Class changed: org.apache.http.impl.DefaultConnectionReuseStrategy Methods added: protected org.apache.http.TokenIterator createTokenIterator(org.apache.http.HeaderIterator); Class changed: org.apache.http.message.AbstractHttpMessage Methods added: protected AbstractHttpMessage(org.apache.http.params.HttpParams); Class changed: org.apache.http.message.BasicHeader Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Class descriptor changed: old: public org.apache.http.message.BasicHeader extends java.lang.Object implements org.apache.http.Header new: public org.apache.http.message.BasicHeader extends java.lang.Object implements org.apache.http.Header, java.lang.Cloneable Class changed: org.apache.http.message.BasicHeaderElement Methods removed: public BasicHeaderElement(org.apache.http.NameValuePair[]); Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Class descriptor changed: old: public org.apache.http.message.BasicHeaderElement extends java.lang.Object implements org.apache.http.HeaderElement new: public org.apache.http.message.BasicHeaderElement extends java.lang.Object implements org.apache.http.HeaderElement, java.lang.Cloneable Class changed: org.apache.http.message.BasicHeaderValueParser Methods removed: protected org.apache.http.HeaderElement createHeaderElement(org.apache.http.NameValuePair[]); public org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, int, int); public org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, int, int); public org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, int, int); public org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, int, int); Methods added: protected org.apache.http.HeaderElement createHeaderElement(java.lang.String, java.lang.String, org.apache.http.NameValuePair[]); public org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); public org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); public org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); public org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor, char[]); public org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); Class changed: org.apache.http.message.BasicHttpEntityEnclosingRequest Methods removed: public BasicHttpEntityEnclosingRequest(java.lang.String, java.lang.String, org.apache.http.HttpVersion); Methods added: public BasicHttpEntityEnclosingRequest(java.lang.String, java.lang.String, org.apache.http.ProtocolVersion); Class changed: org.apache.http.message.BasicLineParser Methods removed: protected org.apache.http.message.HeaderValueParser getHeaderValueParser(); public boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, int); public org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; public org.apache.http.RequestLine parseRequestLine(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; public org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; protected int skipWhitespace(org.apache.http.util.CharArrayBuffer, int); Methods added: public boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); public org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; public org.apache.http.RequestLine parseRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; public org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; protected void skipWhitespace(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); Class changed: org.apache.http.message.BasicNameValuePair Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Class descriptor changed: old: public org.apache.http.message.BasicNameValuePair extends java.lang.Object implements org.apache.http.NameValuePair new: public org.apache.http.message.BasicNameValuePair extends java.lang.Object implements org.apache.http.NameValuePair, java.lang.Cloneable Class changed: org.apache.http.message.BasicRequestLine Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Class descriptor changed: old: public org.apache.http.message.BasicRequestLine extends java.lang.Object implements org.apache.http.RequestLine new: public org.apache.http.message.BasicRequestLine extends java.lang.Object implements org.apache.http.RequestLine, java.lang.Cloneable Class changed: org.apache.http.message.BasicStatusLine Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Class descriptor changed: old: public org.apache.http.message.BasicStatusLine extends java.lang.Object implements org.apache.http.StatusLine new: public org.apache.http.message.BasicStatusLine extends java.lang.Object implements org.apache.http.StatusLine, java.lang.Cloneable Class changed: org.apache.http.message.BufferedHeader Methods removed: 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); Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; Class descriptor changed: old: public org.apache.http.message.BufferedHeader extends java.lang.Object implements org.apache.http.FormattedHeader new: public org.apache.http.message.BufferedHeader extends java.lang.Object implements org.apache.http.FormattedHeader, java.lang.Cloneable Class changed: org.apache.http.message.HeaderValueParser Methods removed: public abstract org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; public abstract org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; public abstract org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; public abstract org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; Methods added: public abstract org.apache.http.HeaderElement[] parseElements(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; public abstract org.apache.http.HeaderElement parseHeaderElement(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; public abstract org.apache.http.NameValuePair parseNameValuePair(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; public abstract org.apache.http.NameValuePair[] parseParameters(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; Class changed: org.apache.http.message.LineParser Methods removed: public abstract boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, int); public abstract org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; public abstract org.apache.http.RequestLine parseRequestLine(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; public abstract org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, int, int) throws org.apache.http.ParseException; Methods added: public abstract boolean hasProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor); public abstract org.apache.http.ProtocolVersion parseProtocolVersion(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; public abstract org.apache.http.RequestLine parseRequestLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; public abstract org.apache.http.StatusLine parseStatusLine(org.apache.http.util.CharArrayBuffer, org.apache.http.message.ParserCursor) throws org.apache.http.ParseException; Class changed: org.apache.http.params.BasicHttpParams Methods removed: public BasicHttpParams(org.apache.http.params.HttpParams); public org.apache.http.params.HttpParams getDefaults(); public void setDefaults(org.apache.http.params.HttpParams); Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; public boolean removeParameter(java.lang.String); Fields removed: protected org.apache.http.params.HttpParams defaults; Class descriptor changed: old: public org.apache.http.params.BasicHttpParams extends org.apache.http.params.AbstractHttpParams implements org.apache.http.params.HttpLinkedParams, java.io.Serializable new: public final org.apache.http.params.BasicHttpParams extends org.apache.http.params.AbstractHttpParams implements java.io.Serializable, java.lang.Cloneable Class changed: org.apache.http.params.HttpParams Methods removed: public abstract boolean isParameterSet(java.lang.String); Methods added: public abstract boolean removeParameter(java.lang.String); Class changed: org.apache.http.protocol.BasicHttpProcessor Methods added: public java.lang.Object clone() throws java.lang.CloneNotSupportedException; protected void copyInterceptors(org.apache.http.protocol.BasicHttpProcessor); Class descriptor changed: old: public org.apache.http.protocol.BasicHttpProcessor extends java.lang.Object implements org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpRequestInterceptorList, org.apache.http.protocol.HttpResponseInterceptorList new: public final org.apache.http.protocol.BasicHttpProcessor extends java.lang.Object implements org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpRequestInterceptorList, org.apache.http.protocol.HttpResponseInterceptorList, java.lang.Cloneable API diff generated by JarDiff http://www.osjava.org/jardiff/ HttpCore NIO API changes (generated by JarDiff 0.2) -------------------------------------- Class removed: public org.apache.http.impl.nio.reactor.ChannelQueue extends java.lang.Object Class removed: public org.apache.http.impl.nio.reactor.SessionQueue extends java.lang.Object Class removed: public org.apache.http.impl.nio.reactor.SessionRequestQueue extends java.lang.Object Class removed: public org.apache.http.impl.nio.reactor.SessionSet extends java.lang.Object Class added: public org.apache.http.impl.nio.SSLClientIOEventDispatch extends java.lang.Object implements org.apache.http.nio.reactor.IOEventDispatch Class added: public org.apache.http.impl.nio.SSLServerIOEventDispatch extends java.lang.Object implements org.apache.http.nio.reactor.IOEventDispatch Class added: public abstract org.apache.http.impl.nio.reactor.ListenerEndpointClosedCallback extends java.lang.Object Class added: public org.apache.http.impl.nio.reactor.ListenerEndpointImpl extends java.lang.Object implements org.apache.http.nio.reactor.ListenerEndpoint Class added: public org.apache.http.impl.nio.reactor.SSLIOSession extends java.lang.Object implements org.apache.http.nio.reactor.IOSession, org.apache.http.nio.reactor.SessionBufferStatus Class added: public abstract org.apache.http.impl.nio.reactor.SSLIOSessionHandler extends java.lang.Object Class added: public final org.apache.http.impl.nio.reactor.SSLMode extends java.lang.Enum Class added: public abstract org.apache.http.nio.NHttpClientIOTarget extends java.lang.Object implements org.apache.http.nio.NHttpClientConnection Class added: public abstract org.apache.http.nio.NHttpServerIOTarget extends java.lang.Object implements org.apache.http.nio.NHttpServerConnection Class added: public org.apache.http.nio.entity.ByteArrayNIOEntity extends org.apache.http.entity.ByteArrayEntity implements org.apache.http.nio.entity.HttpNIOEntity Class added: public org.apache.http.nio.entity.FileNIOEntity extends org.apache.http.entity.FileEntity implements org.apache.http.nio.entity.HttpNIOEntity Class added: public abstract org.apache.http.nio.entity.HttpNIOEntity extends java.lang.Object implements org.apache.http.HttpEntity Class added: public org.apache.http.nio.entity.StringNIOEntity extends org.apache.http.entity.StringEntity implements org.apache.http.nio.entity.HttpNIOEntity Class added: public org.apache.http.nio.params.NIOReactorParamBean extends org.apache.http.params.HttpAbstractParamBean Class added: public final org.apache.http.nio.reactor.IOReactorStatus extends java.lang.Enum Class added: public abstract org.apache.http.nio.reactor.ListenerEndpoint extends java.lang.Object Class changed: org.apache.http.impl.nio.DefaultClientIOEventDispatch Methods removed: public DefaultClientIOEventDispatch(org.apache.http.nio.NHttpClientHandler, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); Methods added: protected org.apache.http.nio.util.ByteBufferAllocator createByteBufferAllocator(); protected org.apache.http.nio.NHttpClientIOTarget createConnection(org.apache.http.nio.reactor.IOSession); protected org.apache.http.HttpResponseFactory createHttpResponseFactory(); Fields added: protected final org.apache.http.nio.util.ByteBufferAllocator allocator; protected final org.apache.http.nio.NHttpClientHandler handler; protected final org.apache.http.params.HttpParams params; Class changed: org.apache.http.impl.nio.DefaultNHttpClientConnection Class descriptor changed: old: public org.apache.http.impl.nio.DefaultNHttpClientConnection extends org.apache.http.impl.nio.NHttpConnectionBase implements org.apache.http.nio.NHttpClientConnection new: public org.apache.http.impl.nio.DefaultNHttpClientConnection extends org.apache.http.impl.nio.NHttpConnectionBase implements org.apache.http.nio.NHttpClientIOTarget Class changed: org.apache.http.impl.nio.DefaultNHttpServerConnection Class descriptor changed: old: public org.apache.http.impl.nio.DefaultNHttpServerConnection extends org.apache.http.impl.nio.NHttpConnectionBase implements org.apache.http.nio.NHttpServerConnection new: public org.apache.http.impl.nio.DefaultNHttpServerConnection extends org.apache.http.impl.nio.NHttpConnectionBase implements org.apache.http.nio.NHttpServerIOTarget Class changed: org.apache.http.impl.nio.DefaultServerIOEventDispatch Methods removed: public DefaultServerIOEventDispatch(org.apache.http.nio.NHttpServiceHandler, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); Methods added: protected org.apache.http.nio.util.ByteBufferAllocator createByteBufferAllocator(); protected org.apache.http.nio.NHttpServerIOTarget createConnection(org.apache.http.nio.reactor.IOSession); protected org.apache.http.HttpRequestFactory createHttpRequestFactory(); Fields added: protected final org.apache.http.nio.util.ByteBufferAllocator allocator; protected final org.apache.http.nio.NHttpServiceHandler handler; protected final org.apache.http.params.HttpParams params; Class changed: org.apache.http.impl.nio.codecs.IdentityDecoder Methods removed: public long read(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Methods added: public long transfer(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class changed: org.apache.http.impl.nio.codecs.IdentityEncoder Methods removed: public long write(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Methods added: public long transfer(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class changed: org.apache.http.impl.nio.codecs.LengthDelimitedDecoder Methods removed: public long read(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Methods added: public long transfer(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class changed: org.apache.http.impl.nio.codecs.LengthDelimitedEncoder Methods removed: public long write(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Methods added: public long transfer(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class changed: org.apache.http.impl.nio.reactor.AbstractIOReactor Methods removed: public int getStatus(); Methods added: public org.apache.http.nio.reactor.IOReactorStatus getStatus(); Class changed: org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor Methods removed: public AbstractMultiworkerIOReactor(int, org.apache.http.util.concurrent.ThreadFactory, org.apache.http.params.HttpParams) throws org.apache.http.nio.reactor.IOReactorException; public int getStatus(); Methods added: public AbstractMultiworkerIOReactor(int, java.util.concurrent.ThreadFactory, org.apache.http.params.HttpParams) throws org.apache.http.nio.reactor.IOReactorException; protected void awaitShutdown(long) throws java.lang.InterruptedException; protected abstract void cancelRequests() throws org.apache.http.nio.reactor.IOReactorException; protected void doShutdown() throws java.io.IOException; public org.apache.http.nio.reactor.IOReactorStatus getStatus(); Class changed: org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor Methods removed: public DefaultConnectingIOReactor(int, org.apache.http.util.concurrent.ThreadFactory, org.apache.http.params.HttpParams) throws org.apache.http.nio.reactor.IOReactorException; Methods added: public DefaultConnectingIOReactor(int, java.util.concurrent.ThreadFactory, org.apache.http.params.HttpParams) throws org.apache.http.nio.reactor.IOReactorException; protected void cancelRequests() throws org.apache.http.nio.reactor.IOReactorException; Class changed: org.apache.http.impl.nio.reactor.DefaultListeningIOReactor Methods removed: public DefaultListeningIOReactor(int, org.apache.http.util.concurrent.ThreadFactory, org.apache.http.params.HttpParams) throws org.apache.http.nio.reactor.IOReactorException; public java.net.SocketAddress listen(java.net.SocketAddress) throws java.io.IOException; Methods added: public DefaultListeningIOReactor(int, java.util.concurrent.ThreadFactory, org.apache.http.params.HttpParams) throws org.apache.http.nio.reactor.IOReactorException; protected void cancelRequests() throws org.apache.http.nio.reactor.IOReactorException; public java.util.Set getEndpoints(); public org.apache.http.nio.reactor.ListenerEndpoint listen(java.net.SocketAddress); public void pause() throws java.io.IOException; public void resume() throws java.io.IOException; Class changed: org.apache.http.impl.nio.reactor.SessionInputBufferImpl Methods added: public int read(java.nio.channels.WritableByteChannel) throws java.io.IOException; public int read(java.nio.channels.WritableByteChannel, int) throws java.io.IOException; Class changed: org.apache.http.impl.nio.reactor.SessionOutputBufferImpl Methods added: public void write(java.nio.channels.ReadableByteChannel) throws java.io.IOException; Class changed: org.apache.http.nio.FileContentDecoder Methods removed: public abstract long read(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Methods added: public abstract long transfer(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class changed: org.apache.http.nio.FileContentEncoder Methods removed: public abstract long write(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Methods added: public abstract long transfer(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class changed: org.apache.http.nio.params.NIOReactorPNames Fields added: public final static java.lang.String GRACE_PERIOD = http.nio.grace-period; Class changed: org.apache.http.nio.params.NIOReactorParams Methods added: public static long getGracePeriod(org.apache.http.params.HttpParams); public static void setGracePeriod(org.apache.http.params.HttpParams, long); Class changed: org.apache.http.nio.protocol.ThrottlingHttpClientHandler Methods removed: public ThrottlingHttpClientHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.nio.protocol.HttpRequestExecutionHandler, org.apache.http.ConnectionReuseStrategy, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.util.concurrent.Executor, org.apache.http.params.HttpParams); public ThrottlingHttpClientHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.nio.protocol.HttpRequestExecutionHandler, org.apache.http.ConnectionReuseStrategy, org.apache.http.util.concurrent.Executor, org.apache.http.params.HttpParams); Methods added: public ThrottlingHttpClientHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.nio.protocol.HttpRequestExecutionHandler, org.apache.http.ConnectionReuseStrategy, java.util.concurrent.Executor, org.apache.http.params.HttpParams); public ThrottlingHttpClientHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.nio.protocol.HttpRequestExecutionHandler, org.apache.http.ConnectionReuseStrategy, org.apache.http.nio.util.ByteBufferAllocator, java.util.concurrent.Executor, org.apache.http.params.HttpParams); Class changed: org.apache.http.nio.protocol.ThrottlingHttpServiceHandler Methods removed: public ThrottlingHttpServiceHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.HttpResponseFactory, org.apache.http.ConnectionReuseStrategy, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.util.concurrent.Executor, org.apache.http.params.HttpParams); public ThrottlingHttpServiceHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.HttpResponseFactory, org.apache.http.ConnectionReuseStrategy, org.apache.http.util.concurrent.Executor, org.apache.http.params.HttpParams); Methods added: public ThrottlingHttpServiceHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.HttpResponseFactory, org.apache.http.ConnectionReuseStrategy, java.util.concurrent.Executor, org.apache.http.params.HttpParams); public ThrottlingHttpServiceHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.HttpResponseFactory, org.apache.http.ConnectionReuseStrategy, org.apache.http.nio.util.ByteBufferAllocator, java.util.concurrent.Executor, org.apache.http.params.HttpParams); Class changed: org.apache.http.nio.reactor.IOReactor Methods removed: public abstract int getStatus(); Methods added: public abstract org.apache.http.nio.reactor.IOReactorStatus getStatus(); Fields removed: 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.ListeningIOReactor Methods removed: public abstract java.net.SocketAddress listen(java.net.SocketAddress) throws java.io.IOException; Methods added: public abstract java.util.Set getEndpoints(); public abstract org.apache.http.nio.reactor.ListenerEndpoint listen(java.net.SocketAddress); public abstract void pause() throws java.io.IOException; public abstract void resume() throws java.io.IOException; Class changed: org.apache.http.nio.reactor.SessionInputBuffer Methods added: public abstract int read(java.nio.channels.WritableByteChannel) throws java.io.IOException; public abstract int read(java.nio.channels.WritableByteChannel, int) throws java.io.IOException; Class changed: org.apache.http.nio.reactor.SessionOutputBuffer Methods added: public abstract void write(java.nio.channels.ReadableByteChannel) throws java.io.IOException; Class changed: org.apache.http.nio.util.ExpandableBuffer Methods added: public java.lang.String toString(); API diff generated by JarDiff http://www.osjava.org/jardiff/ 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 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.