Changes since 4.0 Alpha 2 ------------------- * [HTTPCLIENT-730] Fixed rewriting of URIs containing escaped characters Contributed by Sam Berlin and Oleg Kalnichevski * [HTTPCLIENT-667] Added 'Meta' cookie specification that selects a cookie policy depending on the format of the cookie(s). It is no longer necessary to know beforehand what kind of HTTP cookie support the target host provides. HttpClient is now able to pick up either a lenient or a strict cookie policy depending on the compliance level of the target server. Contributed by Oleg Kalnichevski * [HTTPCLIENT-729] Move HttpRoute and related classes to routing package. Contributed by Roland Weber * [HTTPCLIENT-725] Use TimeUnit arguments for timeouts in connection manager. Contributed by Roland Weber * [HTTPCLIENT-677] Connection manager no longer uses Thread.interrupt(). Contributed by Roland Weber * [HTTPCLIENT-716] Allow application-defined routes. Contributed by Roland Weber * [HTTPCLIENT-712] Improve HttpRoute API Contributed by Roland Weber * [HTTPCLIENT-711] Bad route computed for redirected requests Contributed by Oleg Kalnichevski * [HTTPCLIENT-715] Remove RoutedRequest from API Contributed by Roland Weber * [HTTPCLIENT-705] Fixed incorrect handling of URIs with null path component. Contributed by Oleg Kalnichevski * [HTTPCLIENT-688] HttpOptions#getAllowedMethods can now handle multiple Allow headers. Contributed by Andrea Selva Release 4.0 Alpha 2 ------------------- ALPHA2 release is another milestone in the redesign of HttpClient. It includes a number of improvements since ALPHA1, among which are improved connection pooling, support for proxy chains, redesigned HTTP state and authentication credentials management API, improved RFC 2965 cookie specification. ------------------- HttpClient 3.x features that have NOT yet been ported ------------------- * NTLM authentication scheme * Support for multipart MIME coded entities ------------------- ------------------- Changelog ------------------- * [HTTPCLIENT-698] Resolve non-absolute redirect URIs relative to the request URI Contributed by Johannes Koch * [HTTPCLIENT-697] Throw a more intelligible exception when connection to a remote host cannot be established. Contributed by Oleg Kalnichevski * [HTTPCLIENT-689] Caching of SimpleDateFormat in DateUtils Contributed by Daniel Müller * [HTTPCLIENT-689] stackable parameters in AbstractHttpClient Contributed by Roland Weber * [HTTPCLIENT-477] Use distinct instances of the authentication handler interface for authentication with target and proxy hosts Contributed by Oleg Kalnichevski * [HTTPCLIENT-690] ManagedClientConnection provides access to SSLSession Contributed by Roland Weber * [HTTPCLIENT-692] ClientConnectionManager throws InterruptedException Contributed by Roland Weber * [HTTPCORE-116] moved parameter names to interfaces Contributed by Roland Weber * [HTTPCLIENT-649] support for proxy chains in HttpConn Contributed by Roland Weber * [HTTPCLIENT-636] refactor ThreadSafeClientConnManager in separate package Contributed by Roland Weber * [HTTPCLIENT-669] new HttpRoutePlanner interface and implementation Contributed by Andrea Selva * [HTTPCLIENT-653] detached connection wrapper no longer prevents garbage collection of ThreadSafeClientConnManager Contributed by Roland Weber * [HTTPCLIENT-674] use org.apache.http.util.VersionInfo instead of a local one Contributed by Roland Weber * [HTTPCLIENT-666] Replaced HttpState with CredentialsProvier and CookieStore interfaces Contributed by Oleg Kalnichevski * [HTTPCORE-100] revised HttpContext hierarchy Contributed by Roland Weber * [HTTPCLIENT-618] eliminate class HostConfiguration Contributed by Roland Weber * [HTTPCLIENT-672] re-sync with API changes in core alpha6-SNAPSHOT Contributed by Roland Weber -------------------------------------- HttpClient API changes (generated by JarDiff 0.2) -------------------------------------- Class removed: public org.apache.http.client.HttpState extends java.lang.Object Class removed: public org.apache.http.client.VersionInfo extends java.lang.Object Class removed: public org.apache.http.client.protocol.HttpClientContext extends org.apache.http.protocol.HttpExecutionContext Class removed: public org.apache.http.conn.HostConfiguration extends java.lang.Object Class removed: public org.apache.http.conn.RouteDirector extends java.lang.Object Class removed: public abstract org.apache.http.conn.SecureSocketFactory extends java.lang.Object implements org.apache.http.conn.SocketFactory Class removed: public final org.apache.http.cookie.params.CookieSpecParams extends java.lang.Object Class removed: public org.apache.http.impl.client.DefaultAuthenticationHandler extends java.lang.Object implements org.apache.http.client.AuthenticationHandler Class removed: public org.apache.http.impl.conn.ThreadSafeClientConnManager extends java.lang.Object implements org.apache.http.conn.ClientConnectionManager Class added: public abstract org.apache.http.auth.params.AuthPNames extends java.lang.Object Class added: public abstract org.apache.http.client.CookieStore extends java.lang.Object Class added: public abstract org.apache.http.client.CredentialsProvider extends java.lang.Object Class added: public abstract org.apache.http.client.params.AllClientPNames extends java.lang.Object implements org.apache.http.params.CoreConnectionPNames, org.apache.http.params.CoreProtocolPNames, org.apache.http.client.params.ClientPNames, org.apache.http.auth.params.AuthPNames, org.apache.http.cookie.params.CookieSpecPNames, org.apache.http.conn.params.ConnConnectionPNames, org.apache.http.conn.params.ConnManagerPNames, org.apache.http.conn.params.ConnRoutePNames Class added: public abstract org.apache.http.client.params.ClientPNames extends java.lang.Object Class added: public abstract org.apache.http.client.protocol.ClientContext extends java.lang.Object Class added: public org.apache.http.client.protocol.RequestDefaultHeaders extends java.lang.Object implements org.apache.http.HttpRequestInterceptor Class added: public org.apache.http.conn.BasicRouteDirector extends java.lang.Object implements org.apache.http.conn.HttpRouteDirector Class added: public org.apache.http.conn.HttpHostConnectException extends java.net.ConnectException Class added: public abstract org.apache.http.conn.HttpRouteDirector extends java.lang.Object Class added: public abstract org.apache.http.conn.HttpRoutePlanner extends java.lang.Object Class added: public abstract org.apache.http.conn.LayeredSocketFactory extends java.lang.Object implements org.apache.http.conn.SocketFactory Class added: public abstract org.apache.http.conn.params.ConnConnectionPNames extends java.lang.Object Class added: public abstract org.apache.http.conn.params.ConnManagerPNames extends java.lang.Object Class added: public abstract org.apache.http.conn.params.ConnRoutePNames extends java.lang.Object Class added: public org.apache.http.conn.params.HttpConnParams extends java.lang.Object Class added: public org.apache.http.conn.util.InetAddressUtils extends java.lang.Object Class added: public abstract org.apache.http.cookie.ClientCookie extends java.lang.Object implements org.apache.http.cookie.Cookie Class added: public abstract org.apache.http.cookie.SetCookie extends java.lang.Object implements org.apache.http.cookie.Cookie Class added: public abstract org.apache.http.cookie.SetCookie2 extends java.lang.Object implements org.apache.http.cookie.SetCookie Class added: public abstract org.apache.http.cookie.params.CookieSpecPNames extends java.lang.Object Class added: public abstract org.apache.http.impl.client.AbstractAuthenticationHandler extends java.lang.Object implements org.apache.http.client.AuthenticationHandler Class added: public org.apache.http.impl.client.BasicCookieStore extends java.lang.Object implements org.apache.http.client.CookieStore Class added: public org.apache.http.impl.client.BasicCredentialsProvider extends java.lang.Object implements org.apache.http.client.CredentialsProvider Class added: public org.apache.http.impl.client.ClientParamsStack extends org.apache.http.params.AbstractHttpParams Class added: public org.apache.http.impl.client.DefaultProxyAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler Class added: public org.apache.http.impl.client.DefaultTargetAuthenticationHandler extends org.apache.http.impl.client.AbstractAuthenticationHandler Class added: public org.apache.http.impl.conn.DefaultHttpRoutePlanner extends java.lang.Object implements org.apache.http.conn.HttpRoutePlanner Class added: public org.apache.http.impl.conn.DefaultResponseParser extends org.apache.http.impl.io.AbstractMessageParser Class added: public abstract org.apache.http.impl.conn.tsccm.AbstractConnPool extends java.lang.Object implements org.apache.http.impl.conn.tsccm.RefQueueHandler Class added: public org.apache.http.impl.conn.tsccm.BasicPoolEntry extends org.apache.http.impl.conn.AbstractPoolEntry Class added: public org.apache.http.impl.conn.tsccm.BasicPoolEntryRef extends java.lang.ref.WeakReference Class added: public org.apache.http.impl.conn.tsccm.BasicPooledConnAdapter extends org.apache.http.impl.conn.AbstractPooledConnAdapter Class added: public org.apache.http.impl.conn.tsccm.ConnPoolByRoute extends org.apache.http.impl.conn.tsccm.AbstractConnPool Class added: public org.apache.http.impl.conn.tsccm.ConnPoolByRoute.WaitingThread extends java.lang.Object Class added: public abstract org.apache.http.impl.conn.tsccm.RefQueueHandler extends java.lang.Object Class added: public org.apache.http.impl.conn.tsccm.RefQueueWorker extends java.lang.Object implements java.lang.Runnable Class added: public org.apache.http.impl.conn.tsccm.RouteSpecificPool extends java.lang.Object Class added: public org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager extends java.lang.Object implements org.apache.http.conn.ClientConnectionManager Class added: public org.apache.http.impl.cookie.BasicClientCookie extends java.lang.Object implements org.apache.http.cookie.SetCookie, org.apache.http.cookie.ClientCookie Class added: public org.apache.http.impl.cookie.BasicClientCookie2 extends org.apache.http.impl.cookie.BasicClientCookie implements org.apache.http.cookie.SetCookie2 Class added: public org.apache.http.impl.cookie.RFC2965CommentUrlAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler Class added: public org.apache.http.impl.cookie.RFC2965DiscardAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler Class added: public org.apache.http.impl.cookie.RFC2965DomainAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler Class added: public org.apache.http.impl.cookie.RFC2965PortAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler Class added: public org.apache.http.impl.cookie.RFC2965Spec extends org.apache.http.impl.cookie.RFC2109Spec Class added: public org.apache.http.impl.cookie.RFC2965SpecFactory extends java.lang.Object implements org.apache.http.cookie.CookieSpecFactory Class added: public org.apache.http.impl.cookie.RFC2965VersionAttributeHandler extends java.lang.Object implements org.apache.http.cookie.CookieAttributeHandler Class changed: org.apache.http.auth.params.AuthParams Fields removed: public final static java.lang.String CREDENTIAL_CHARSET = http.protocol.credential-charset; Class changed: org.apache.http.client.AuthenticationHandler Methods removed: public abstract java.util.Map getProxyChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; public abstract java.util.Map getTargetChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; public abstract boolean isProxyAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); public abstract boolean isTargetAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); Methods added: public abstract java.util.Map getChallenges(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext) throws org.apache.http.auth.MalformedChallengeException; public abstract boolean isAuthenticationRequested(org.apache.http.HttpResponse, org.apache.http.protocol.HttpContext); Class changed: org.apache.http.client.ClientRequestDirector Method changed: old: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; new: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Class changed: org.apache.http.client.HttpClient Method changed: old: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest) throws org.apache.http.HttpException, java.io.IOException; new: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Method changed: old: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; new: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Method changed: old: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.HttpException, java.io.IOException; new: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Method changed: old: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; new: public abstract org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Class changed: org.apache.http.client.methods.HttpOptions Method changed: old: public java.util.Set getAllowedMethods(org.apache.http.HttpResponse); new: public java.util.Set getAllowedMethods(org.apache.http.HttpResponse) throws org.apache.http.ParseException; Class changed: org.apache.http.client.methods.HttpUriRequest Methods removed: public abstract org.apache.http.HttpVersion getHttpVersion(); Class changed: org.apache.http.client.params.HttpClientParams Fields removed: public final static java.lang.String ALLOW_CIRCULAR_REDIRECTS = http.protocol.allow-circular-redirects; public final static java.lang.String AUTH_SCHEME_PRIORITY = http.protocol-auth-scheme-priority; public final static java.lang.String CONNECTION_MANAGER_FACTORY = http.connection-manager.factory; public final static java.lang.String CONNECTION_MANAGER_TIMEOUT = http.connection-manager.timeout; public final static java.lang.String COOKIE_POLICY = http.protocol.cookie-policy; public final static java.lang.String DEFAULT_HEADERS = http.default-headers; public final static java.lang.String DEFAULT_HOST = http.default-host; public final static java.lang.String DEFAULT_PROXY = http.default-proxy; public final static java.lang.String HANDLE_AUTHENTICATION = http.protocol.handle-authentication; public final static java.lang.String HANDLE_REDIRECTS = http.protocol.handle-redirects; public final static java.lang.String MAX_REDIRECTS = http.protocol.max-redirects; public final static java.lang.String PREEMPTIVE_AUTHENTICATION = http.protocol.authentication-preemptive; public final static java.lang.String REJECT_RELATIVE_REDIRECT = http.protocol.reject-relative-redirect; public final static java.lang.String VIRTUAL_HOST = http.virtual-host; Class changed: org.apache.http.conn.ClientConnectionManager Methods added: public abstract org.apache.http.params.HttpParams getParams(); Method changed: old: public abstract org.apache.http.conn.ManagedClientConnection getConnection(org.apache.http.conn.HttpRoute); new: public abstract org.apache.http.conn.ManagedClientConnection getConnection(org.apache.http.conn.HttpRoute) throws java.lang.InterruptedException; Method changed: old: public abstract org.apache.http.conn.ManagedClientConnection getConnection(org.apache.http.conn.HttpRoute, long) throws org.apache.http.conn.ConnectionPoolTimeoutException; new: public abstract org.apache.http.conn.ManagedClientConnection getConnection(org.apache.http.conn.HttpRoute, long) throws org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException; Class changed: org.apache.http.conn.HttpRoute Methods removed: deprecated: public final org.apache.http.conn.HostConfiguration toHostConfig(); Class changed: org.apache.http.conn.ManagedClientConnection Methods removed: public abstract void tunnelCreated(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; Methods added: public abstract javax.net.ssl.SSLSession getSSLSession(); public abstract void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; public abstract void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; Class changed: org.apache.http.conn.RouteTracker Methods removed: deprecated: public final org.apache.http.conn.HostConfiguration toHostConfig(); Class changed: org.apache.http.conn.params.HttpConnectionManagerParams Methods removed: public static int getMaxConnectionsPerHost(org.apache.http.params.HttpParams, org.apache.http.conn.HostConfiguration); public static void setMaxConnectionsPerHost(org.apache.http.params.HttpParams, org.apache.http.conn.HostConfiguration, int); Methods added: public static int getMaxConnectionsPerHost(org.apache.http.params.HttpParams, org.apache.http.conn.HttpRoute); public static void setMaxConnectionsPerHost(org.apache.http.params.HttpParams, org.apache.http.conn.HttpRoute, int); Fields removed: public final static java.lang.String MAX_HOST_CONNECTIONS = http.connection-manager.max-per-host; public final static java.lang.String MAX_TOTAL_CONNECTIONS = http.connection-manager.max-total; Class changed: org.apache.http.conn.ssl.SSLSocketFactory Class descriptor changed: old: public org.apache.http.conn.ssl.SSLSocketFactory extends java.lang.Object implements org.apache.http.conn.SecureSocketFactory new: public org.apache.http.conn.ssl.SSLSocketFactory extends java.lang.Object implements org.apache.http.conn.LayeredSocketFactory Class changed: org.apache.http.cookie.Cookie Methods removed: public Cookie(java.lang.String, java.lang.String); public boolean isDomainAttributeSpecified(); public boolean isPathAttributeSpecified(); public void setComment(java.lang.String); public void setDomain(java.lang.String); public void setDomainAttributeSpecified(boolean); public void setExpiryDate(java.util.Date); public void setPath(java.lang.String); public void setPathAttributeSpecified(boolean); public void setSecure(boolean); public void setVersion(int); public java.lang.String toString(); Methods added: public abstract java.lang.String getCommentURL(); public abstract int[] getPorts(); Class descriptor changed: old: public org.apache.http.cookie.Cookie extends java.lang.Object new: public abstract org.apache.http.cookie.Cookie extends java.lang.Object Method changed: old: public java.lang.String getComment(); new: public abstract java.lang.String getComment(); Method changed: old: public java.lang.String getDomain(); new: public abstract java.lang.String getDomain(); Method changed: old: public java.util.Date getExpiryDate(); new: public abstract java.util.Date getExpiryDate(); Method changed: old: public java.lang.String getName(); new: public abstract java.lang.String getName(); Method changed: old: public java.lang.String getPath(); new: public abstract java.lang.String getPath(); Method changed: old: public java.lang.String getValue(); new: public abstract java.lang.String getValue(); Method changed: old: public int getVersion(); new: public abstract int getVersion(); Method changed: old: public boolean isExpired(java.util.Date); new: public abstract boolean isExpired(java.util.Date); Method changed: old: public boolean isPersistent(); new: public abstract boolean isPersistent(); Method changed: old: public boolean isSecure(); new: public abstract boolean isSecure(); Class changed: org.apache.http.cookie.CookieAttributeHandler Methods removed: public abstract void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public abstract void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Class changed: org.apache.http.cookie.CookieSpec Methods added: public abstract int getVersion(); public abstract org.apache.http.Header getVersionHeader(); Class changed: org.apache.http.cookie.SM Fields added: public final static java.lang.String COOKIE2 = Cookie2; public final static java.lang.String SET_COOKIE2 = Set-Cookie2; Class changed: org.apache.http.impl.client.AbstractHttpClient Methods removed: protected abstract org.apache.http.client.AuthenticationHandler createAuthenticationHandler(); protected abstract org.apache.http.client.HttpState createHttpState(); public final synchronized org.apache.http.client.AuthenticationHandler getAuthenticationHandler(); public final synchronized org.apache.http.client.HttpState getState(); public synchronized void setAuthenticationHandler(org.apache.http.client.AuthenticationHandler); public synchronized void setState(org.apache.http.client.HttpState); Methods added: public synchronized void addRequestInterceptor(org.apache.http.HttpRequestInterceptor, int); public synchronized void addResponseInterceptor(org.apache.http.HttpResponseInterceptor, int); protected abstract org.apache.http.client.CookieStore createCookieStore(); protected abstract org.apache.http.client.CredentialsProvider createCredentialsProvider(); protected abstract org.apache.http.conn.HttpRoutePlanner createHttpRoutePlanner(); protected abstract org.apache.http.client.AuthenticationHandler createProxyAuthenticationHandler(); protected abstract org.apache.http.client.AuthenticationHandler createTargetAuthenticationHandler(); protected org.apache.http.params.HttpParams determineParams(org.apache.http.HttpRequest); public final synchronized org.apache.http.client.CookieStore getCookieStore(); public final synchronized org.apache.http.client.CredentialsProvider getCredentialsProvider(); public final synchronized org.apache.http.client.AuthenticationHandler getProxyAuthenticationHandler(); public final synchronized org.apache.http.conn.HttpRoutePlanner getRoutePlanner(); public final synchronized org.apache.http.client.AuthenticationHandler getTargetAuthenticationHandler(); public void removeRequestInterceptorByClass(java.lang.Class); public void removeResponseInterceptorByClass(java.lang.Class); public synchronized void setCookieStore(org.apache.http.client.CookieStore); public synchronized void setCredentialsProvider(org.apache.http.client.CredentialsProvider); public synchronized void setProxyAuthenticationHandler(org.apache.http.client.AuthenticationHandler); public synchronized void setRoutePlanner(org.apache.http.conn.HttpRoutePlanner); public synchronized void setTargetAuthenticationHandler(org.apache.http.client.AuthenticationHandler); Method changed: old: public org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest) throws org.apache.http.HttpException, java.io.IOException; new: public org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Method changed: old: public final org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; new: public final org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Method changed: old: public final org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.HttpException, java.io.IOException; new: public final org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Method changed: old: public final org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; new: public final org.apache.http.HttpResponse execute(org.apache.http.client.methods.HttpUriRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Class changed: org.apache.http.impl.client.DefaultClientRequestDirector Methods removed: public DefaultClientRequestDirector(org.apache.http.conn.ClientConnectionManager, org.apache.http.ConnectionReuseStrategy, org.apache.http.protocol.HttpProcessor, org.apache.http.client.HttpRequestRetryHandler, org.apache.http.client.RedirectHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.params.HttpParams); protected boolean createTunnel(org.apache.http.conn.HttpRoute, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; Methods added: public DefaultClientRequestDirector(org.apache.http.conn.ClientConnectionManager, org.apache.http.ConnectionReuseStrategy, org.apache.http.protocol.HttpProcessor, org.apache.http.client.HttpRequestRetryHandler, org.apache.http.client.RedirectHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.client.AuthenticationHandler, org.apache.http.params.HttpParams); protected boolean createTunnelToProxy(org.apache.http.conn.HttpRoute, int, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; protected boolean createTunnelToTarget(org.apache.http.conn.HttpRoute, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; Method changed: old: protected org.apache.http.conn.ManagedClientConnection allocateConnection(org.apache.http.conn.HttpRoute, long) throws org.apache.http.HttpException, org.apache.http.conn.ConnectionPoolTimeoutException; new: protected org.apache.http.conn.ManagedClientConnection allocateConnection(org.apache.http.conn.HttpRoute, long) throws org.apache.http.HttpException, org.apache.http.conn.ConnectionPoolTimeoutException, java.lang.InterruptedException; Method changed: old: public org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException; new: public org.apache.http.HttpResponse execute(org.apache.http.client.RoutedRequest, org.apache.http.protocol.HttpContext) throws org.apache.http.HttpException, java.io.IOException, java.lang.InterruptedException; Class changed: org.apache.http.impl.client.DefaultHttpClient Methods removed: protected org.apache.http.client.AuthenticationHandler createAuthenticationHandler(); protected org.apache.http.client.HttpState createHttpState(); Methods added: protected org.apache.http.client.CookieStore createCookieStore(); protected org.apache.http.client.CredentialsProvider createCredentialsProvider(); protected org.apache.http.conn.HttpRoutePlanner createHttpRoutePlanner(); protected org.apache.http.client.AuthenticationHandler createProxyAuthenticationHandler(); protected org.apache.http.client.AuthenticationHandler createTargetAuthenticationHandler(); Class changed: org.apache.http.impl.conn.AbstractClientConnAdapter Methods added: public javax.net.ssl.SSLSession getSSLSession(); Class changed: org.apache.http.impl.conn.AbstractPoolEntry Methods removed: protected AbstractPoolEntry(org.apache.http.conn.OperatedClientConnection); public void tunnelCreated(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; Methods added: protected AbstractPoolEntry(org.apache.http.conn.OperatedClientConnection, org.apache.http.conn.HttpRoute); public void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; public void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; Fields added: protected org.apache.http.conn.HttpRoute plannedRoute; Class changed: org.apache.http.impl.conn.AbstractPooledConnAdapter Methods removed: public void tunnelCreated(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; Methods added: public void tunnelProxy(org.apache.http.HttpHost, boolean, org.apache.http.params.HttpParams) throws java.io.IOException; public void tunnelTarget(boolean, org.apache.http.params.HttpParams) throws java.io.IOException; Class changed: org.apache.http.impl.conn.DefaultClientConnection 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.HttpMessageParser createResponseParser(org.apache.http.io.SessionInputBuffer, org.apache.http.HttpResponseFactory, org.apache.http.params.HttpParams); 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.conn.SingleClientConnManager Methods added: public org.apache.http.params.HttpParams getParams(); Class changed: org.apache.http.impl.conn.SingleClientConnManager.PoolEntry Fields removed: protected org.apache.http.conn.HttpRoute plannedRoute; Class changed: org.apache.http.impl.cookie.BasicCommentHandler Methods removed: public void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Class changed: org.apache.http.impl.cookie.BasicDomainHandler Methods removed: public void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Class changed: org.apache.http.impl.cookie.BasicExpiresHandler Methods removed: public void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Class changed: org.apache.http.impl.cookie.BasicMaxAgeHandler Methods removed: public void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Class changed: org.apache.http.impl.cookie.BasicPathHandler Methods removed: public void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Class changed: org.apache.http.impl.cookie.BasicSecureHandler Methods removed: public void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Class changed: org.apache.http.impl.cookie.BrowserCompatSpec Methods added: public int getVersion(); public org.apache.http.Header getVersionHeader(); Class changed: org.apache.http.impl.cookie.NetscapeDraftSpec Methods added: public int getVersion(); public org.apache.http.Header getVersionHeader(); Class changed: org.apache.http.impl.cookie.RFC2109DomainHandler Methods removed: public void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Class changed: org.apache.http.impl.cookie.RFC2109Spec Methods added: protected void formatCookieAsVer(org.apache.http.util.CharArrayBuffer, org.apache.http.cookie.Cookie, int); protected void formatParamAsVer(org.apache.http.util.CharArrayBuffer, java.lang.String, java.lang.String, int); public int getVersion(); public org.apache.http.Header getVersionHeader(); Class changed: org.apache.http.impl.cookie.RFC2109VersionHandler Methods removed: public void parse(org.apache.http.cookie.Cookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; Methods added: public void parse(org.apache.http.cookie.SetCookie, java.lang.String) throws org.apache.http.cookie.MalformedCookieException; API diff generated by JarDiff http://www.osjava.org/jardiff/ Release 4.0 Alpha 1 ------------------- HttpClient 4.0 represents a complete, ground-up redesign and almost a complete rewrite of the HttpClient 3.x codeline. This release finally addresses several design flaws that existed since the 1.0 release and could not be fixed without a major code overhaul and breaking API compatibility. The HttpClient 4.0 API is still very experimental and is bound to change during the course of the ALPHA development phase. Several important features have not yet been ported to the new API. Architectural changes --------------------- * Redesign of the HttpClient internals addressing all known major architectural shortcomings of the 3.x codeline * Cleaner, more flexible and expressive API * Better performance and smaller memory footprint due to a more efficient HTTP transport based on HttpCore. HttpClient 4.0 is expected to be 10% to 25% faster than HttpClient 3.x codeline * More modular structure * Pluggable redirect and authentication handlers * Support for protocol incerceptors * Improved connection management * Improved support for sending requests via a proxy or a chain of proxies * Improved handling redirects of entity enclosing requests * More flexible SSL context customization * Reduced intermediate garbage in the process of generating HTTP requests and parsing HTTP responses ------------------- HttpClient 3.x features that have NOT yet been ported ------------------- * NTLM authentication scheme * RFC2965 cookie policy (Cookie2) * Support for multipart MIME coded entities ------------------- Changelog ------------------- The following is a list of contributions tracked in JIRA. Note that this is not a complete list of contributions or changes. Since the API was redesigned completely, tracking everything outside of the source code repository would have been too burdensome. * [HTTPCLIENT-655] User-Agent string no longer violates RFC Contributed by Oleg Kalnichevski * [HTTPCLIENT-541] Virtual host API redesign Contributed by Oleg Kalnichevski * [HTTPCLIENT-614] Allow for different strategies when checking CN of x509 certificates Contributed by Julius Davies * [HTTPCLIENT-136] Fixed inadequate proxy support Long standing architectural problem. Issue opened on 19/Dec/2002. Contributed by Oleg Kalnichevski * [HTTPCLIENT-63] Support for pluggable redirect and authentication handlers Long standing architectural problem. Issue opened on 15/Jul/2002. Contributed by Oleg Kalnichevski * [HTTPCLIENT-245] Fixed redirect handling. HttpClient can now automatically handle redirects of entity enclosing requests. Long standing architectural problem. Issue opened on 14/Jul/2003. Contributed by Oleg Kalnichevski * [HTTPCLIENT-613] HTTPS connections now verify CN of x509 certificates Contributed by Julius Davies * [HTTPCLIENT-497] Wire/header logger names consistent with class loggers Contributed by Oleg Kalnichevski * [HTTPCLIENT-484] AuthSSLProtocolSocketFactory in the main distribution Contributed by Oleg Kalnichevski * [HTTPCLIENT-589] Do not consume the remaining response content if the connection is to be closed Contributed by Roland Weber * [HTTPCLIENT-475] Support for unconnected sockets. HTTP requests can now be aborted while network socket is still being connected. Contributed by Roland Weber