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 HttpCore API changes (generated by JarDiff 0.2) -------------------------------------- Class removed: public org.apache.http.impl.DefaultHttpRequestRetryHandler extends java.lang.Object implements org.apache.http.protocol.HttpRequestRetryHandler Class removed: public org.apache.http.message.HttpGet extends org.apache.http.message.BasicHttpRequest Class removed: public org.apache.http.message.HttpHead extends org.apache.http.message.BasicHttpRequest Class removed: public org.apache.http.message.HttpPost extends org.apache.http.message.BasicHttpEntityEnclosingRequest Class removed: public abstract org.apache.http.protocol.HttpRequestRetryHandler extends java.lang.Object Class removed: public org.apache.http.util.DateParseException extends java.lang.Exception Class removed: public final org.apache.http.util.DateUtils extends java.lang.Object Class added: public abstract org.apache.http.HttpConnectionMetrics extends java.lang.Object Class added: public org.apache.http.impl.HttpConnectionMetricsImpl extends java.lang.Object implements org.apache.http.HttpConnectionMetrics Class added: public org.apache.http.impl.io.HttpTransportMetricsImpl extends java.lang.Object implements org.apache.http.io.HttpTransportMetrics Class added: public abstract org.apache.http.io.HttpTransportMetrics extends java.lang.Object Class added: public abstract org.apache.http.params.AbstractHttpParams extends java.lang.Object implements org.apache.http.params.HttpParams Class added: public abstract org.apache.http.params.HttpLinkedParams extends java.lang.Object implements org.apache.http.params.HttpParams Class added: public org.apache.http.params.HttpParamsLinker extends java.lang.Object Class changed: org.apache.http.HttpClientConnection Methods removed: public abstract org.apache.http.HttpResponse receiveResponseHeader(org.apache.http.params.HttpParams) throws org.apache.http.HttpException, java.io.IOException; Methods added: public abstract org.apache.http.HttpResponse receiveResponseHeader() throws org.apache.http.HttpException, java.io.IOException; Class changed: org.apache.http.HttpConnection Methods added: public abstract org.apache.http.HttpConnectionMetrics getMetrics(); Class changed: org.apache.http.HttpServerConnection Methods removed: public abstract org.apache.http.HttpRequest receiveRequestHeader(org.apache.http.params.HttpParams) throws org.apache.http.HttpException, java.io.IOException; Methods added: public abstract org.apache.http.HttpRequest receiveRequestHeader() throws org.apache.http.HttpException, java.io.IOException; Class changed: org.apache.http.impl.AbstractHttpClientConnection Methods removed: protected org.apache.http.HttpResponse readResponseStatusLine(org.apache.http.params.HttpParams) throws org.apache.http.HttpException, java.io.IOException; public org.apache.http.HttpResponse receiveResponseHeader(org.apache.http.params.HttpParams) throws org.apache.http.HttpException, java.io.IOException; protected void setHttpDataReceiver(org.apache.http.io.HttpDataReceiver); protected void setHttpDataTransmitter(org.apache.http.io.HttpDataTransmitter); protected void setMaxHeaderCount(int); protected void setResponseFactory(org.apache.http.HttpResponseFactory); Methods added: protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer(); protected org.apache.http.impl.entity.EntitySerializer createEntitySerializer(); protected org.apache.http.HttpResponseFactory createHttpResponseFactory(); public org.apache.http.HttpConnectionMetrics getMetrics(); protected void init(org.apache.http.io.HttpDataReceiver, org.apache.http.io.HttpDataTransmitter, org.apache.http.params.HttpParams); protected org.apache.http.HttpResponse readResponseStatusLine() throws org.apache.http.HttpException, java.io.IOException; public org.apache.http.HttpResponse receiveResponseHeader() throws org.apache.http.HttpException, java.io.IOException; Class changed: org.apache.http.impl.AbstractHttpServerConnection Methods removed: public org.apache.http.HttpRequest receiveRequestHeader(org.apache.http.params.HttpParams) throws org.apache.http.HttpException, java.io.IOException; protected org.apache.http.HttpRequest receiveRequestLine(org.apache.http.params.HttpParams) throws org.apache.http.HttpException, java.io.IOException; protected void setHttpDataReceiver(org.apache.http.io.HttpDataReceiver); protected void setHttpDataTransmitter(org.apache.http.io.HttpDataTransmitter); protected void setMaxHeaderCount(int); protected void setRequestFactory(org.apache.http.HttpRequestFactory); Methods added: protected org.apache.http.impl.entity.EntityDeserializer createEntityDeserializer(); protected org.apache.http.impl.entity.EntitySerializer createEntitySerializer(); protected org.apache.http.HttpRequestFactory createHttpRequestFactory(); public org.apache.http.HttpConnectionMetrics getMetrics(); protected void init(org.apache.http.io.HttpDataReceiver, org.apache.http.io.HttpDataTransmitter, org.apache.http.params.HttpParams); public org.apache.http.HttpRequest receiveRequestHeader() throws org.apache.http.HttpException, java.io.IOException; protected org.apache.http.HttpRequest receiveRequestLine() throws org.apache.http.HttpException, java.io.IOException; Class changed: org.apache.http.impl.SocketHttpClientConnection Methods added: 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; protected java.net.Socket getSocket(); Fields removed: protected volatile boolean open; protected java.net.Socket socket; Class changed: org.apache.http.impl.SocketHttpServerConnection Methods added: 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; protected java.net.Socket getSocket(); Fields removed: protected volatile boolean open; protected java.net.Socket socket; Class changed: org.apache.http.impl.io.AbstractHttpDataReceiver Methods removed: protected void init(java.io.InputStream, int); public void reset(org.apache.http.params.HttpParams); Methods added: public org.apache.http.io.HttpTransportMetrics getMetrics(); protected void init(java.io.InputStream, int, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.io.AbstractHttpDataTransmitter Methods removed: protected void init(java.io.OutputStream, int); public void reset(org.apache.http.params.HttpParams); Methods added: public org.apache.http.io.HttpTransportMetrics getMetrics(); protected void init(java.io.OutputStream, int, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.io.SocketHttpDataReceiver Methods removed: public SocketHttpDataReceiver(java.net.Socket, int) throws java.io.IOException; Methods added: public SocketHttpDataReceiver(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; Class changed: org.apache.http.impl.io.SocketHttpDataTransmitter Methods removed: public SocketHttpDataTransmitter(java.net.Socket, int) throws java.io.IOException; Methods added: public SocketHttpDataTransmitter(java.net.Socket, int, org.apache.http.params.HttpParams) throws java.io.IOException; Class changed: org.apache.http.io.HttpDataReceiver Methods removed: public abstract void reset(org.apache.http.params.HttpParams); Methods added: public abstract org.apache.http.io.HttpTransportMetrics getMetrics(); Class changed: org.apache.http.io.HttpDataTransmitter Methods removed: public abstract void reset(org.apache.http.params.HttpParams); Methods added: public abstract org.apache.http.io.HttpTransportMetrics getMetrics(); Class changed: org.apache.http.params.BasicHttpParams Methods removed: public boolean getBooleanParameter(java.lang.String, boolean); public double getDoubleParameter(java.lang.String, double); public int getIntParameter(java.lang.String, int); public long getLongParameter(java.lang.String, long); public boolean isParameterFalse(java.lang.String); public boolean isParameterTrue(java.lang.String); public org.apache.http.params.HttpParams setBooleanParameter(java.lang.String, boolean); public org.apache.http.params.HttpParams setDoubleParameter(java.lang.String, double); public org.apache.http.params.HttpParams setIntParameter(java.lang.String, int); public org.apache.http.params.HttpParams setLongParameter(java.lang.String, long); Methods added: public org.apache.http.params.HttpParams copy(); protected void copyParams(org.apache.http.params.HttpParams); Fields added: protected org.apache.http.params.HttpParams defaults; Class descriptor changed: old: public org.apache.http.params.BasicHttpParams extends java.lang.Object implements org.apache.http.params.HttpParams, java.io.Serializable new: public org.apache.http.params.BasicHttpParams extends org.apache.http.params.AbstractHttpParams implements org.apache.http.params.HttpLinkedParams, java.io.Serializable Method changed: old: public synchronized void clear(); new: public void clear(); Method changed: old: public synchronized org.apache.http.params.HttpParams getDefaults(); new: public org.apache.http.params.HttpParams getDefaults(); Method changed: old: public synchronized java.lang.Object getParameter(java.lang.String); new: public java.lang.Object getParameter(java.lang.String); Method changed: old: public synchronized boolean isParameterSetLocally(java.lang.String); new: public boolean isParameterSetLocally(java.lang.String); Method changed: old: public synchronized void setDefaults(org.apache.http.params.HttpParams); new: public void setDefaults(org.apache.http.params.HttpParams); Method changed: old: public synchronized org.apache.http.params.HttpParams setParameter(java.lang.String, java.lang.Object); new: public org.apache.http.params.HttpParams setParameter(java.lang.String, java.lang.Object); Method changed: old: public synchronized void setParameters(java.lang.String[], java.lang.Object); new: public void setParameters(java.lang.String[], java.lang.Object); Class changed: org.apache.http.params.HttpConnectionParams Fields added: public final static java.lang.String MAX_STATUS_LINE_GARBAGE = http.connection.max-status-line-garbage; Class changed: org.apache.http.params.HttpParams Methods removed: public abstract org.apache.http.params.HttpParams getDefaults(); public abstract boolean isParameterSetLocally(java.lang.String); public abstract void setDefaults(org.apache.http.params.HttpParams); Methods added: public abstract org.apache.http.params.HttpParams copy(); Class changed: org.apache.http.params.HttpProtocolParams Fields removed: public final static java.lang.String STATUS_LINE_GARBAGE_LIMIT = http.protocol.status-line-garbage-limit; Class changed: org.apache.http.protocol.BasicHttpProcessor Methods added: public org.apache.http.protocol.BasicHttpProcessor copy(); Class changed: org.apache.http.protocol.HttpDateGenerator Fields added: public final static java.util.TimeZone GMT; public final static java.lang.String PATTERN_RFC1123 = EEE, dd MMM yyyy HH:mm:ss zzz; Class changed: org.apache.http.protocol.HttpRequestExecutor Methods removed: public HttpRequestExecutor(org.apache.http.protocol.HttpProcessor); protected void doFinishResponse(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; protected void doPrepareRequest(org.apache.http.HttpRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; public final org.apache.http.params.HttpParams getParams(); public final void setParams(org.apache.http.params.HttpParams); Methods added: public HttpRequestExecutor(); public void postProcess(org.apache.http.HttpResponse, org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; public void preProcess(org.apache.http.HttpRequest, org.apache.http.protocol.HttpProcessor, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; Class changed: org.apache.http.util.HeaderUtils Methods removed: public static org.apache.http.Header[] parseHeaders(org.apache.http.io.HttpDataReceiver, int) throws org.apache.http.HttpException, java.io.IOException; Methods added: public static org.apache.http.Header[] parseHeaders(org.apache.http.io.HttpDataReceiver, int, int) throws org.apache.http.HttpException, java.io.IOException; API diff generated by JarDiff http://www.osjava.org/jardiff/ HttpCore NIO API changes (generated by JarDiff 0.2) -------------------------------------- Class added: public abstract org.apache.http.nio.FileContentDecoder extends java.lang.Object implements org.apache.http.nio.ContentDecoder Class added: public abstract org.apache.http.nio.FileContentEncoder extends java.lang.Object implements org.apache.http.nio.ContentEncoder Class added: public org.apache.http.nio.entity.ContentBufferEntity extends org.apache.http.entity.BasicHttpEntity Class added: public org.apache.http.nio.entity.ContentInputStream extends java.io.InputStream Class added: public org.apache.http.nio.entity.ContentOutputStream extends java.io.OutputStream Class added: public abstract org.apache.http.nio.protocol.NHttpClientHandlerBase extends org.apache.http.nio.protocol.NHttpHandlerBase implements org.apache.http.nio.NHttpClientHandler Class added: public abstract org.apache.http.nio.protocol.NHttpHandlerBase extends java.lang.Object Class added: public abstract org.apache.http.nio.protocol.NHttpServiceHandlerBase extends org.apache.http.nio.protocol.NHttpHandlerBase implements org.apache.http.nio.NHttpServiceHandler Class added: public org.apache.http.nio.protocol.ThrottlingHttpClientHandler extends org.apache.http.nio.protocol.NHttpClientHandlerBase Class added: public abstract org.apache.http.nio.util.ByteBufferAllocator extends java.lang.Object Class added: public org.apache.http.nio.util.DirectByteBufferAllocator extends java.lang.Object implements org.apache.http.nio.util.ByteBufferAllocator Class added: public org.apache.http.nio.util.HeapByteBufferAllocator extends java.lang.Object implements org.apache.http.nio.util.ByteBufferAllocator Class changed: org.apache.http.impl.nio.DefaultClientIOEventDispatch Methods added: public DefaultClientIOEventDispatch(org.apache.http.nio.NHttpClientHandler, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.nio.DefaultNHttpClientConnection Methods removed: public DefaultNHttpClientConnection(org.apache.http.nio.reactor.IOSession, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); public void cancelRequest(); Methods added: public DefaultNHttpClientConnection(org.apache.http.nio.reactor.IOSession, org.apache.http.HttpResponseFactory, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); public void resetInput(); public void resetOutput(); Method changed: old: public void submitRequest(org.apache.http.HttpRequest) throws org.apache.http.HttpException; new: public void submitRequest(org.apache.http.HttpRequest) throws java.io.IOException, org.apache.http.HttpException; Class changed: org.apache.http.impl.nio.DefaultNHttpServerConnection Methods removed: public DefaultNHttpServerConnection(org.apache.http.nio.reactor.IOSession, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); public void cancelRequest(); Methods added: public DefaultNHttpServerConnection(org.apache.http.nio.reactor.IOSession, org.apache.http.HttpRequestFactory, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); public void resetInput(); public void resetOutput(); Method changed: old: public void submitResponse(org.apache.http.HttpResponse) throws org.apache.http.HttpException; new: public void submitResponse(org.apache.http.HttpResponse) throws java.io.IOException, org.apache.http.HttpException; Class changed: org.apache.http.impl.nio.DefaultServerIOEventDispatch Methods added: public DefaultServerIOEventDispatch(org.apache.http.nio.NHttpServiceHandler, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.nio.NHttpConnectionBase Methods removed: public NHttpConnectionBase(org.apache.http.nio.reactor.IOSession, org.apache.http.params.HttpParams); Methods added: public NHttpConnectionBase(org.apache.http.nio.reactor.IOSession, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); public org.apache.http.HttpConnectionMetrics getMetrics(); Fields added: protected final org.apache.http.impl.HttpConnectionMetricsImpl metrics; Method changed: old: protected void assertNotClosed(); new: protected void assertNotClosed() throws java.io.IOException; Class changed: org.apache.http.impl.nio.codecs.ChunkEncoder Method changed: old: public void complete(); new: public void complete() throws java.io.IOException; Method changed: old: public int write(java.nio.ByteBuffer); new: public int write(java.nio.ByteBuffer) throws java.io.IOException; Class changed: org.apache.http.impl.nio.codecs.HttpMessageParser Methods removed: public HttpMessageParser(org.apache.http.impl.nio.reactor.SessionInputBuffer); Methods added: public HttpMessageParser(org.apache.http.impl.nio.reactor.SessionInputBuffer, org.apache.http.params.HttpParams); public void configure(); Class changed: org.apache.http.impl.nio.codecs.HttpRequestParser Methods removed: public HttpRequestParser(org.apache.http.impl.nio.reactor.SessionInputBuffer, org.apache.http.HttpRequestFactory); Methods added: public HttpRequestParser(org.apache.http.impl.nio.reactor.SessionInputBuffer, org.apache.http.HttpRequestFactory, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.nio.codecs.HttpResponseParser Methods removed: public HttpResponseParser(org.apache.http.impl.nio.reactor.SessionInputBuffer, org.apache.http.HttpResponseFactory); Methods added: public HttpResponseParser(org.apache.http.impl.nio.reactor.SessionInputBuffer, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.nio.codecs.IdentityDecoder Methods added: public long read(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class descriptor changed: old: public org.apache.http.impl.nio.codecs.IdentityDecoder extends org.apache.http.impl.nio.codecs.AbstractContentDecoder new: public org.apache.http.impl.nio.codecs.IdentityDecoder extends org.apache.http.impl.nio.codecs.AbstractContentDecoder implements org.apache.http.nio.FileContentDecoder Class changed: org.apache.http.impl.nio.codecs.IdentityEncoder Methods added: public long write(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class descriptor changed: old: public org.apache.http.impl.nio.codecs.IdentityEncoder extends org.apache.http.impl.nio.codecs.AbstractContentEncoder new: public org.apache.http.impl.nio.codecs.IdentityEncoder extends org.apache.http.impl.nio.codecs.AbstractContentEncoder implements org.apache.http.nio.FileContentEncoder Class changed: org.apache.http.impl.nio.codecs.LengthDelimitedDecoder Methods added: public long read(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class descriptor changed: old: public org.apache.http.impl.nio.codecs.LengthDelimitedDecoder extends org.apache.http.impl.nio.codecs.AbstractContentDecoder new: public org.apache.http.impl.nio.codecs.LengthDelimitedDecoder extends org.apache.http.impl.nio.codecs.AbstractContentDecoder implements org.apache.http.nio.FileContentDecoder Class changed: org.apache.http.impl.nio.codecs.LengthDelimitedEncoder Methods added: public long write(java.nio.channels.FileChannel, long, long) throws java.io.IOException; Class descriptor changed: old: public org.apache.http.impl.nio.codecs.LengthDelimitedEncoder extends org.apache.http.impl.nio.codecs.AbstractContentEncoder new: public org.apache.http.impl.nio.codecs.LengthDelimitedEncoder extends org.apache.http.impl.nio.codecs.AbstractContentEncoder implements org.apache.http.nio.FileContentEncoder Class changed: org.apache.http.impl.nio.reactor.AbstractMultiworkerIOReactor Methods added: protected long getSelectTimeout(); Class changed: org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor Fields removed: public static int TIMEOUT_CHECK_INTERVAL; Class changed: org.apache.http.impl.nio.reactor.DefaultListeningIOReactor Fields removed: public static int TIMEOUT_CHECK_INTERVAL; Class changed: org.apache.http.impl.nio.reactor.IOSessionImpl Methods added: public void shutdown(); Class descriptor changed: old: package org.apache.http.impl.nio.reactor.IOSessionImpl extends java.lang.Object implements org.apache.http.nio.reactor.IOSession new: public org.apache.http.impl.nio.reactor.IOSessionImpl extends java.lang.Object implements org.apache.http.nio.reactor.IOSession Class changed: org.apache.http.impl.nio.reactor.SessionInputBuffer Methods added: public SessionInputBuffer(int, int, org.apache.http.nio.util.ByteBufferAllocator); Method changed: old: public boolean readLine(org.apache.http.util.CharArrayBuffer, boolean); new: public boolean readLine(org.apache.http.util.CharArrayBuffer, boolean) throws java.nio.charset.CharacterCodingException; Method changed: old: public java.lang.String readLine(boolean); new: public java.lang.String readLine(boolean) throws java.nio.charset.CharacterCodingException; Class changed: org.apache.http.impl.nio.reactor.SessionOutputBuffer Methods added: public SessionOutputBuffer(int, int, org.apache.http.nio.util.ByteBufferAllocator); Method changed: old: public void writeLine(org.apache.http.util.CharArrayBuffer); new: public void writeLine(org.apache.http.util.CharArrayBuffer) throws java.nio.charset.CharacterCodingException; Class changed: org.apache.http.impl.nio.reactor.SessionRequestImpl Class descriptor changed: old: package org.apache.http.impl.nio.reactor.SessionRequestImpl extends java.lang.Object implements org.apache.http.nio.reactor.SessionRequest new: public org.apache.http.impl.nio.reactor.SessionRequestImpl extends java.lang.Object implements org.apache.http.nio.reactor.SessionRequest Class changed: org.apache.http.nio.IOControl Methods added: public abstract void shutdown() throws java.io.IOException; Class changed: org.apache.http.nio.NHttpClientConnection Methods removed: public abstract void cancelRequest(); Methods added: public abstract void resetInput(); public abstract void resetOutput(); Method changed: old: public abstract void submitRequest(org.apache.http.HttpRequest) throws org.apache.http.HttpException; new: public abstract void submitRequest(org.apache.http.HttpRequest) throws java.io.IOException, org.apache.http.HttpException; Class changed: org.apache.http.nio.NHttpServerConnection Methods removed: public abstract void cancelRequest(); Methods added: public abstract void resetInput(); public abstract void resetOutput(); Method changed: old: public abstract void submitResponse(org.apache.http.HttpResponse) throws org.apache.http.HttpException; new: public abstract void submitResponse(org.apache.http.HttpResponse) throws java.io.IOException, org.apache.http.HttpException; Class changed: org.apache.http.nio.params.HttpNIOParams Methods added: public static long getSelectInterval(org.apache.http.params.HttpParams); public static void setSelectInterval(org.apache.http.params.HttpParams, long); Fields added: public final static java.lang.String SELECT_INTERVAL = http.nio.select-interval; Class changed: org.apache.http.nio.protocol.BufferingHttpClientHandler Methods removed: public void exception(org.apache.http.nio.NHttpClientConnection, java.io.IOException); public void exception(org.apache.http.nio.NHttpClientConnection, org.apache.http.HttpException); public void setEventListener(org.apache.http.nio.protocol.EventListener); Methods added: public BufferingHttpClientHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.nio.protocol.HttpRequestExecutionHandler, org.apache.http.ConnectionReuseStrategy, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); Class descriptor changed: old: public org.apache.http.nio.protocol.BufferingHttpClientHandler extends java.lang.Object implements org.apache.http.nio.NHttpClientHandler new: public org.apache.http.nio.protocol.BufferingHttpClientHandler extends org.apache.http.nio.protocol.NHttpClientHandlerBase Class changed: org.apache.http.nio.protocol.BufferingHttpServiceHandler Methods removed: public void exception(org.apache.http.nio.NHttpServerConnection, java.io.IOException); public org.apache.http.params.HttpParams getParams(); public void setEventListener(org.apache.http.nio.protocol.EventListener); public void setExpectationVerifier(org.apache.http.protocol.HttpExpectationVerifier); public void setHandlerResolver(org.apache.http.protocol.HttpRequestHandlerResolver); public void timeout(org.apache.http.nio.NHttpServerConnection); Methods added: public BufferingHttpServiceHandler(org.apache.http.protocol.HttpProcessor, org.apache.http.HttpResponseFactory, org.apache.http.ConnectionReuseStrategy, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); Class descriptor changed: old: public org.apache.http.nio.protocol.BufferingHttpServiceHandler extends java.lang.Object implements org.apache.http.nio.NHttpServiceHandler new: public org.apache.http.nio.protocol.BufferingHttpServiceHandler extends org.apache.http.nio.protocol.NHttpServiceHandlerBase implements org.apache.http.nio.NHttpServiceHandler Class changed: org.apache.http.nio.protocol.EventListener Methods removed: public abstract void connectionClosed(java.net.InetAddress); public abstract void connectionOpen(java.net.InetAddress); public abstract void connectionTimeout(java.net.InetAddress); public abstract void fatalIOException(java.io.IOException); public abstract void fatalProtocolException(org.apache.http.HttpException); Methods added: public abstract void connectionClosed(org.apache.http.nio.NHttpConnection); public abstract void connectionOpen(org.apache.http.nio.NHttpConnection); public abstract void connectionTimeout(org.apache.http.nio.NHttpConnection); public abstract void fatalIOException(java.io.IOException, org.apache.http.nio.NHttpConnection); public abstract void fatalProtocolException(org.apache.http.HttpException, org.apache.http.nio.NHttpConnection); Class changed: org.apache.http.nio.protocol.HttpRequestExecutionHandler Method changed: old: public abstract void handleResponse(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); new: public abstract void handleResponse(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws java.io.IOException; Class changed: org.apache.http.nio.protocol.ThrottlingHttpServiceHandler Methods removed: public void exception(org.apache.http.nio.NHttpServerConnection, java.io.IOException); public org.apache.http.params.HttpParams getParams(); public void setEventListener(org.apache.http.nio.protocol.EventListener); public void setExpectationVerifier(org.apache.http.protocol.HttpExpectationVerifier); public void setHandlerResolver(org.apache.http.protocol.HttpRequestHandlerResolver); public void timeout(org.apache.http.nio.NHttpServerConnection); Methods added: 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); protected void shutdownConnection(org.apache.http.nio.NHttpConnection, java.lang.Throwable); Fields added: protected final org.apache.http.util.concurrent.Executor executor; Class descriptor changed: old: public org.apache.http.nio.protocol.ThrottlingHttpServiceHandler extends java.lang.Object implements org.apache.http.nio.NHttpServiceHandler new: public org.apache.http.nio.protocol.ThrottlingHttpServiceHandler extends org.apache.http.nio.protocol.NHttpServiceHandlerBase Class changed: org.apache.http.nio.reactor.IOReactorException Methods removed: public IOReactorException(java.lang.String, java.io.IOException); Methods added: public IOReactorException(java.lang.String, java.lang.Exception); Class changed: org.apache.http.nio.reactor.IOSession Methods added: public abstract void shutdown(); Class changed: org.apache.http.nio.util.ExpandableBuffer Methods removed: public ExpandableBuffer(int); Methods added: public ExpandableBuffer(int, org.apache.http.nio.util.ByteBufferAllocator); Class changed: org.apache.http.nio.util.SharedInputBuffer Methods removed: public SharedInputBuffer(int, org.apache.http.nio.IOControl); Methods added: public SharedInputBuffer(int, org.apache.http.nio.IOControl, org.apache.http.nio.util.ByteBufferAllocator); Class changed: org.apache.http.nio.util.SharedOutputBuffer Methods removed: public SharedOutputBuffer(int, org.apache.http.nio.IOControl); Methods added: public SharedOutputBuffer(int, org.apache.http.nio.IOControl, org.apache.http.nio.util.ByteBufferAllocator); Class changed: org.apache.http.nio.util.SimpleInputBuffer Methods removed: public SimpleInputBuffer(int); Methods added: public SimpleInputBuffer(int, org.apache.http.nio.util.ByteBufferAllocator); Class changed: org.apache.http.nio.util.SimpleOutputBuffer Methods removed: public SimpleOutputBuffer(int); Methods added: public SimpleOutputBuffer(int, org.apache.http.nio.util.ByteBufferAllocator); 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.SSLClientIOEventDispatch Methods removed: public SSLClientIOEventDispatch(org.apache.http.nio.NHttpClientHandler, javax.net.ssl.SSLContext, org.apache.http.impl.nio.reactor.SSLIOSessionHandler, org.apache.http.params.HttpParams); Methods added: public SSLClientIOEventDispatch(org.apache.http.nio.NHttpClientHandler, javax.net.ssl.SSLContext, org.apache.http.impl.nio.reactor.SSLIOSessionHandler, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); Class changed: org.apache.http.impl.nio.reactor.SSLIOSession Methods removed: public synchronized void initialize(org.apache.http.impl.nio.reactor.SSLMode, org.apache.http.params.HttpParams) throws javax.net.ssl.SSLException; Methods added: public synchronized void bind(org.apache.http.impl.nio.reactor.SSLMode, org.apache.http.params.HttpParams) throws javax.net.ssl.SSLException; Class changed: org.apache.http.impl.nio.reactor.SSLServerIOEventDispatch Methods removed: public SSLServerIOEventDispatch(org.apache.http.nio.NHttpServiceHandler, javax.net.ssl.SSLContext, org.apache.http.impl.nio.reactor.SSLIOSessionHandler, org.apache.http.params.HttpParams); Methods added: public SSLServerIOEventDispatch(org.apache.http.nio.NHttpServiceHandler, javax.net.ssl.SSLContext, org.apache.http.impl.nio.reactor.SSLIOSessionHandler, org.apache.http.nio.util.ByteBufferAllocator, org.apache.http.params.HttpParams); API diff generated by JarDiff http://www.osjava.org/jardiff/ 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 API diff generated by JarDiff http://www.osjava.org/jardiff/ 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.