===========
Changes log  
===========

- 2.1.7 (02/09/2014)
    - API changes
      - XEE injection security fix (Issue #826). As a side effect, the XML parsers adopt a more 
        defensive strategy and prevent by default loading of external entities, validation of DTD,
        and turn on secure processing for SAX parsers.

    - Bug fixed
       - Fixed issue #810, generation of HTML representation of a WADL document.
       - Fixed issue #720, complete the content-type header with the right boundary 
         parameter value when using multipart representations.
         Reported by xwen97.
       - Fixed issue #821: status reason phrase set by the Jetty connector.
       - Fixed issue #823: Service-Component header missing in manifest.mf for servlet extension.
         Reported by Ioan Lupu.
       - XEE injection security fix. Issue #826. Reported by Alvaro Munoz.
       - OData not passing null when property not marked nullable, issue #663.
         Reported by Carl J. Mosca and contributed by Luke Adams.
       - Android ICS: needs fixing for HttpUrlConnectionCall.getResponseHeaders, issue #548.
         Reported by Bobby Sawhney.

- 2.1.6 (12/05/2013)
    - Bug fixed
       - Fixed issue #809 regression introduced when handling issues #774 and #778.

- 2.1.5 (12/05/2013)
    - Bug fixed
       - Fixed issue #791, EncoderService exposed size-fixed lists of ignored and accepted media types.
         Reported by Tal Liron.
       - Fixed issue #784, that leads to a maladjusted exception.
         Reported by David Jorm.
       - Fixed issue #649, if needed, add base64 padding characters to encoded md5 hash before decoding.
         Reported and contributed by Andy Dennie.
    - Enhancements
      - Added support of nowrap "deflater" (support of GZIP compatible compression), issue #786.
        Reported and contributed by Tal Liron.
      - Added ability to override Accept-encoding header values #654.
        Proposed by Tal Liron.
      - WritableSocketChannel whould write in loop to ensure all data been written, issue #783.
        Contributed by Xiaoping Feng.

- 2.1.4 (09/07/2013)
    - Bug fixed
       - Fixed issues #774, #778 - Removed default support of JavaBeans XML-deserialization, 
         binary-deserialization on ObjectRepresentation class.
         Reported by David Jorm.

- 2.1.3 (08/23/2013)
    - Bug fixed
       - Fixed issue #734 - Implementations of XmlHttpRequest in IE versions prior to IE10 turn 
         204 status into 1223. Reported by Koen Maes.
       - Fixed issue #739 - copy extension headers from JAX-RS api to restlet response.
         Reported by Mark Kharitonov.
       - Fixed issue #727 generation of JSON extension for GWT edition.
       - Fixed issue #757 - Infinite Loop in Feed.
       - Fixed issue #753 - Date concurrency issue due to broken caching attempts. 
         Reported by @effad. Solved by Robert Fischer and Tim Peierls.
       - Fixed issue #774 - Removed default support of JavaBeans XML-serialization.
         Reported by David Jorm, Dinis Cruz, Abraham Kang and Alvaro Munoz. 
       - Fixed issue #778 - Removed default support of JavaBeans binary-serialization.
         Reported by David Jorm.
    - Misc
       - Added log warning when an authentication scheme does not define a "realm" parameter.
         Reported by Loïc Oudot (#759).

- 2.1.2 (02/28/2013)
    - Bug fixed
       - Log initialization issue in engine with GAE edition fixed.
         Occurred in production.
       - Internal HTTP connector didn't properly configure the
         socket. Factorized client side logic.
       - Fixed HTTPS issues in internal connector.
       - Fixed discovering and setting of attributes from OData 
         representations.
       - Fixed potential flushing issue with wrapped representations.
       - Added support for parsing IPv6 when parsing host URI in internal HTTP server.
         Contributed by Jun Hou. Reported by Reddy Lakshman and Neha Saini.
       - Fixed JaxRsApplication(Application) constructor with a JaxRsRestlet adapter.
       - Fixed NPE while issuing 405 responses in the JAX-RS extension.
         Reported by Daniel Halperin
       - The current response, application, context and virtual host are now properly
         restored when the representation is called back to be written by the internal
         HTTP connector.
       - Fixed bug in Reference when no path existing but the query string has some
         '/' characters in it. getPath() returns StringOutOfBounds exceptions.
         Reported by Nicolas Rinaudo.
       - Fixed bug when chaining Transformer or TransformRepresentation
         objects. Reported by Brian Sletten.

- 2.1.1 (12/23/2012)
    - Bug fixed
       - Fixed arrays serialization in GWT edition.
         Contributed by Jeff Plourde.
       - Fixed internal HTTP connector to enable handling of asynchronous
         client requests. Contributed by Florian Bucklers
       - Fixed controllerSleepTimeMs default value in documentation for 
         internal HTTP connector.
       - Fixed generation of requests in GWT edition, using the browser agent
         name by default.
       - Fixed implementation of method "getAttribute" by the ClientResource 
         and ServerResource classes (issue #695). Reported by Dennis Mitchell.
       - Fixed conversion Java Double/EDM.Double types in OData extension.
         Reported by Martin Grohmann.
       - Took care of the IPV6 addresses. Reported by Laurent Rustuel.
       - Add missing implementation in BufferingRepresentation for issue #681.
         Contributed by Florian Bucklers.
       - Added support of multiple levels of $expand in OData extension.
         Contributed by Emmanuel Liossis. 
       - Fixed potential infinite loops while reading headers
         (issues #599 and #656). Reported by Wei Wei Wang.
       - Fixed reading of Via header (issue #599).
         Reported by Nicolas Rinaudo.
       - Strict conneg should evaluate media type parameters (issue #559, #652).
         Reported and contributed by Andy Dennie.
       - Fixed CookieAuthenticator which should redirect the user's browser to the 
         getLoginFormPath() when the credentials are missing or stale (issue #697).
         Reported and contributed by Tim Peierls.
    - Misc
       - Prevent logging of verbose stack trace. Reported by Grzegorz Godlewski.

- 2.1.0 (09/20/2012)
    - Misc
       - Added support of GWT 2.5.
    
- 2.1 Release Candidate 6 (08/22/2012)
    - Bug fixed
       - Fixed sharing of ClientResource context with the underlying connector, 
         when this ClientResource is used outside a Component.
       - Reduced the number of iterators created when internal NIO connector is 
         idle. Reported by Yan Zhou 
       - Fixed support for enabling and disabling cipher suites, restricting the 
         SSL protocol version and the requesting a client certificate, for all 
         connectors (internal and extensions). 
         Reported by Enoch Stephen, Jim Zuber and Andreas Schnabl.
       - Reduced CPU consumption of internal NIO/HTTP connector by using proper
         NIO selector wakeup logic instead of constant looping. 
         Reported by James Moger.
       - Fixed regression regarding JAXB namespace parsing.
         Reported by Jim Trainor, Jean Duteau and Lukas Niemeier.
       - Fixed alphanum comparator bug.
         Reported by Abdunnassar Usman, fixed by Rob Heittman.
       - ServerResource.doConditionalHandle now returns 406 if no acceptable 
         variant and strict mode is true in ConnegService.
         Contributed by Andrew Dennie.
    - API changes
       - Renamed Directory#setAlphaComparator and setAlphaNumComparator
         methods into useAlphaComparator and useAlphaNumComparator with
         proper deprecation. Suggested by Tim Peierls.
       - Added getJsonArray, getJsonBoolean, getJsonNull and getJsonString 
         methods to JsonRepresentation in the GWT edition.
       - Moved Couple and Triple classes to RDF extension. Added conveniency
         add(...) methods to Graph class.
    - Misc
       - Reverted Role equality test to default Java object equality as
         equality based on name could cause issues with MemoryRealm
         mapping if several applications used the same role names.
       - Upgraded Jetty to version 7.6.5.
       - Upgraded Jackson to version 1.9.8.

- 2.1 Release Candidate 5 (05/23/2012)
    - Bug fixed
       - Fixed issue with OutputRepresentation retrieved as InputStream
         using its getStream() method when writing negative integers.
         Now properly shift values into the 0-255 ranges, leaving the -1
         value as a clear marker for end of file.
         Reported by Gabriel Pulido and Marc Knaup.
       - Fixed user agent parsing for Chrome and Safari.
       - Usage of ranges on representations having unknown size.
         Reported by Bjorn Roche.
       - Internal connector now closes entity stream/channel upon 
         completion. Suggested by Arjohn Kampman
       - Fixed hanging bug in NIO connector occurring especially with
         chunked encoding. Reported by John Logsdon.
       - Fixed retrieval of SSL cipher suites and client certificates
         for the internal HTTP client.
       - Fixed security bug in the XML extension that allows XML external 
         entity attacks. Reported by Nicolas Gr�goire, 
         Caleb James DeLisle and Fabio Mancinelli.
    - API changes
       - Renamed ReadableListener into ReadingListener
       - Renamed InputListener into ByteReadingListener
       - Renamed ReaderListener into CharacterReadingListener
       - Renamed StringListener into StringReadingListener
       - Added missing SelectionRegistration parameter to
         SelectionListener#onSelected() method.
       - Added missing ClientResource#setProxyChallengeResponse(...),
         ServerResource#setProxyChallengeRequests(...) and
         Resource#getProxyChallenge...() methods. Reported ,tion.
       - Added methods to MetadataService to retrieve the list of extension
         names, per metadata subclass.
       - Added constructor with just a name to Role.
       - Replaced SecretVerifier#createUser(identifier) method with more
         flexible createUser(identifier, request, response) one. 
         Suggested by Tim Peierls.
       - Added CertificateAuthenticator to SSL extension that verifies the
         presence of trusted client certificates.
         Contributed by Bruno Harbulot.
    - Misc
       - Lowered trace level in Redirector from INFO to FINE.
       - Cleaned up EncodeRepresentation and DecodeRepresentation classes.

- 2.1 Release Candidate 4 (04/06/2012)
    - Bug fixed
       - Basic fix for content negotiation regarding input entities.
       - Removed useless reverse DNS lookup when creating a client socket 
         channel. Reported and contributed by Alessandro Pacifici.
       - Fixed NPE when setting last segment on Reference.
         Reported by Laszlo Hordos.
       - Fixed OSGi manifest file for the jackson library that exposes a 
         private package. Reported by Laszlo Hordos.
       - Enhanced support of ServerResource that inherits from generic classes.
       - Fixed content negotiation regarding request entities
         to ensure a better annotated method dispatching.
       - Reference doesn't consider '{' and '}' as invalid characters anymore,
         allowing resolution of URI templates on the client-side.
         Reported by Andrei Pozolotin.
       - Fixed OutputRepresentation with negative int that can't be serialized 
         on client side. Reported by Gabriel Pulido.
       - Fixed parsing of Feed using the Rome extension.
         Reported by Andy Dennie.
       - Allowed multiple cookies set at once for JAX-RS.
         Reported and contributed by Grzegorz Godlewski.
       - Fixed formatting of expires cookie setting value.
         Reported and contributed by Grzegorz Godlewski.
       - Fixed CookieAuthenticator wrong login/logout intercept comparison.
         Reported and contributed by Martin Svensson.
       - Fix representations and converters that swallow exceptions whereas the 
         ConverterHelper#toObject throws IOException.
       - Fixed namespaces declaration using SaxRepresentation.
         Reported by Nicholas Waltham.
       - Fixed scoring algorithm of the JaxbConverter, detected when used in 
         conjunction with JacksonConverter. Reported by Michael Henderson.
    - API changes
       - Moved Client#handle(Request) method to Restlet class.
       - Added Resource#getQueryValue(String), getAttribute(String),
         setQueryValue(String, String) and setAttribute(String, String)
         shortcut methods.
       - Moved Client#handle(...) methods to parent Restlet class.
       - Context#clientDispatcher and serverDispatcher are now Restlet
         instead of Client. Needed to fix URI template resolution
         in simple ClientResource instances.
       - Added ClientResource#accept(...) shortcut methods.
    - Misc
        - Updated FreeMarker library to version 2.3.19.

- 2.1 Release Candidate 3 (02/15/2012)
    - Bug fixed
       - Fixed Guice Maven group ID. Reported by Kristoffer Gronowski.
       - Relaxed content type header parsing in case of a trailing 
         semicolon. Reported by Jean-Baptiste Dusseaut.

- 2.1 Release Candidate 2 (01/15/2012)
    - Bug fixed
       - Fixed the JAX-RS extension that did not introspect the 
         interfaces and parent classes of resource classes.
         Reported and contributed by Shaun Elliott.
       - On the client-side, a challenge response with a raw value 
         defined wasn't taken into account if a helper was missing.
         Refactored engine's AuthenticatorHelper to move common 
         logic to the AuthenticatorUtils class.
         Reported by Alex Milowski.
       - Fixed POM dependency on Apache HTTP Client 4.1.1.
         Reported by Dejan Lozanovic.
       - Fixed potential NPE in StrictConneg.
       - Fixed configuration of the default application's outbound, 
         when the application is not hosted by a Component.
         Reported by Klaus-Peter Schlotter.
    - API changes
       - Added generic value type to NamedValue interface.
       - Added ByteArrayRepresentation to org.restlet.representation
         Suggested by Jerome Idylle.
       - Added constructor from characters arrays in the
         StringRepresentation class.
       - Added constructors to ClientResource taking only a request
         object (prototype) and no (last) response.
       - Added EmfRepresentation#createEmfXmlResource(...) method
         and write(EObject, OutputStream) method.
         Suggested in part by Bryan Hunt.
    - Misc
       - Updated XStream to version 1.4.1
       - Updated Jettison to version 1.3
       - Lowered level of log messages when socket shutdown and close
         is throwing exception. Suggested by John Logdson.
       
- 2.1 Release Candidate 1 (10/06/2011)
    - Bug fixed
       - Potential NPE in ServerServlet#init(Application).
         Reported by Bryan Hunt.
       - The Application(Context) constructor now behaves like the
         setContext(Context) method. Reported by Bryan Hunt.
       - Fixed internal HTTPS server which wasn't creating an HTTPS
         request with all SSL related properties. 
         Reported by Henry Story.
       - Fixed bug causing premature closing of connections managed
         by the internal NIO/HTTP/SIP connector.
         Reported by Cyril Lakech.
       - The max IO idle time used in code was 60s instead of the
         30s announced in the Javadocs. Now using 30s.
       - Removed extra empty line in XML documents added by the
         XmlWriter class.
       - Fixed potential loops due to BrokenCyclicBarrier in internal
         NIO connector.
       - Fixed issue regarding the posting of Web forms to the GAE 
         platform (release 1.5.0 and higher) due to GAE misbehaviour 
         that consumes streams when receiving Web forms.
         Reported by Bjorn Roche.
    - API changes
       - Added Authenticator#multiAuthenticating to better control
         optional authenticators and ensure we don't attempt 
         several authentications if not necessary.
       - Added ClientInfo#certificates and cipherSuite properties
         and deprecated related attributes.
       - Added shortcut ClientResource#addQueryParameter and
         addSegment methods, based on the "reference" property.
       - Added WadlApplication#canDescribe() method to facilitate
         customization.
       - Added lower-level RedableListener providing a ByteBuffer
         when new content is asynchronously provided.
       - Added TransformRepresentation#errorListener to be able to
         replace the default one. Suggested by Warren Janssens.
       - Attempting to create a Form instance from an EmptyRepres.
         doesn't throw an exception anymore, just a fine log trace.
         Reported by George Calm.
       - Added APPLICATION_XQUERY media type constant.
         Suggested by Alex Milowski.
       - Refactored internal DigestUtils to clearly separate HMac
         variants SHA-1 and SHA-256, in crypto extension.
       - Refactored internal AwsUtils to clearly separate HMac
         variants SHA-1 and SHA-256, in crypto extension.
       - Added Graph.add*() methods and Link constructors as syntaxic
         sugar in RDF extension.
       - Added Reference.encode(...) methods with a "queryString"
         boolean parameter to ensure that spaces are encoded as %20
         instead of '+'. Reported by Matt Stromske.
       - Added Reference.getQueryAsForm(boolean decode) method to 
         prevent decoding of form parameters in some cases.
       - Added "lineWidth" and "usingEncodedAttributeStyle" properties
         to EmfRepresentation to facilitate XMI writing configuration. 
         Reported by Sebastien Schneider.
       - Added ChallengeResponse.secretAlgorithm property in case the
         password is only known and usable in a hashed form (like it 
         can be the case for HTTP Digest). Added new constructors as 
         well as on ChallengeMessage.
       - Increased the default request and response buffer size of the
         internal connector to 16 and 32 kb in order, similar to Jetty.
       - Increased default timeouts for internal connector. 5 mn for 
         idle thread and 1 mn for idle IO connection.
       - Added Representation#isEmpty() and hasKnownSize() methods.
    - New features
       - Added ChallengeScheme.HTTP_AWS_QUERY constant and client-
         side support for Amazon Web Services's SimpleDB special
         authentication scheme (using URI query parameters).
       - Added ISO 8601 date format in DateUtils class.
    - Misc
       - Updated SLF4j to version 1.6.2
       - Updated Apache Commons Codec to version 1.5
       - Updated Apache Commons Collection to version 3.2.1
       - Updated Apache Commons FileUpload to version 1.2.2
       - Updated Apache Commons IO to version 2.0.1
       - Updated Apache Commons Lang to version 2.6
       - Updated Apache Commons Pool to version 1.5.6
       - Updated Apache HTTP Client to version 4.1.1
       - Updated Apache HTTP Core to version 4.1
       - Updated Apache HTTP MIME to version 4.1.1
       - Updated Jackson to version 1.9.0
       - Updated FreeMarker to version 2.3.18

- 2.1 Milestone 7 (08/24/2011)
    - Bug fixed
       - Fixed blocking regression in the GWT edition that avoids to 
         compile client proxies. Reported by Joscha Feth.
      
- 2.1 Milestone 6 (08/20/2011)
    - Breaking change
      - When retrieving or updating the raw headers in the Request or 
        Response attributes, the type should now be Series<Header> 
        instead of Series<Parameter>.
      - The SecretVerifier.verify(identifier, secret) nows returns an
        integer instead of a Boolean for more precise answers such as
        for stale credentials (expired password).
    - API changes
      - Renamed UniformResource into Resource with proper deprecation.
      - Added NamedValue interface to support common behavior in Series
        instead of having to rely on the Parameter class as a base class.
      - Updated the Series class to not need to use a subclass all the time
        such as Form, CookieSeries and CookieSettingSeries. Now it is a 
        concrete class, taking a Class parameter at construction time such 
        as Parameter, Header, or any class implementing the NamedValue 
        interface.
      - Deprecated Couple, Triple, CookieSeries, CookieSettingSeries.
        Will be removed in version 2.2.
      - Added Reference.addQueryParameter(Parameter) and
        addQueryParameters(Iterable<Parameter>) methods.
      - ClientResource now uses GET as its default HTTP method instead 
        of null.
      - Added "timeIssued" property to ChallengeResponse, in order to 
        support cookie based authentication.
      - Deprecated ClientInfo.getPreferredVariant() methods in favor of
        the new ConnegService.
      - Deprecated ClientResource.createRequest(Request) in favor of a
        new createRequest() method.
      - Added Request.isSynchronous() and isAsynchronous() methods as
        convenient shortcuts.
      - Added ClientResource.handleInbound(...) and handleOutbound(...)
        method to factorize even more logic.
      - Added Representation.append(Appendable) method.
      - Deprecated Series.createSeries(...) method. Use constructor
        instead.
      - Added SecretVerifier.createUser(identifier) to allow creation
        of User subclasses if necessary.
      - Renamed JaxRsApplication.guard into authenticator to match the
        parameter Authenticator class.
      - Factorized "finderClass" property from Application and Router
        into parent Restlet class and added a createFinder(Class)
        method to facilitate instantiation and overriding.
        Reported by Tim Peierls.
      - Deprecated ServerList.setNext(Class) as it isn't used and its
        logic isn't consistent with similar methods in Filter/Router.        
        Reported by Tim Peierls.
      - Fix JaxRs extension when handling Web forms.
      - Clarified exception thrown when the converter service is unable
        to convert a representation to a given target class. Also, if 
        the conversion fails, a null object is returned and can be passed
        to an annotated Java method for example.
      - In case of exception in the user code invoked by an onResponse
        callback or a GWT client proxy, the callback was invoked again with
        an error status which proved to be non intuitive. Now, we simply
        log a warning and stop the processing.
        Reported by Cyril Lakech.
      - Added Protocol.valueOf(name, version) method.
    - New features
      - Added a CookieAuthenticator class in the org.restlet.ext.crypto
        extension to provide customizable and secure authentication via
        cookies, in a way that is as compatible as possible with HTTP
        challenge based authentication.
        Based on an initial contribution by Remi Dewitte.
      - Added org.restlet.service.ConnegService to provide a way to 
        control the content negotiation behavior at the application level.
        It offers two modes: strict and flexible (default) by other algorithms
        can be plugged by overriding this class and reusing the Conneg
        subclasses in the engine package. Suggested by David Bordoley.        
      - Improved Restlet annotation value syntax to support alternate 
        variants using '|' and combination of several metadata for a 
        single variant using '+' separator. Also, all metadata are now
        supported, not just media types.
      - Added support for URI query constraints in the value of Restlet
        method annotations such as @Get("form:json?light") or 
        @Get("?level=2"). This allows returning and serializing 
        different representation beans based on those parameters.
      - Added HTML extension that currently supports write HTML form
        in URL encoded or multipart form data. As a future replacement for 
        the org.restlet.data.Form class, it adds the ability to work with 
        multipart forms (currently writing only) with the same Java API.
        Some suggestions from John Logdson.
      - Added MediaType.APPLICATION_ECORE and APPLICATION_XMI constants,
        and deprecated APPLICATION_XMI_XML. Registered "ecore" extension
        into the MetadataService common extensions.
        Issue reported by Thomas Eskenazi.
      - Added EMF extension that supports the conversion between EMF
        generated beans and XML or XMI representations. It can also
        automatically write simple HTML representations for navigating
        your web API. Hyperlinks can be specified using EMF eAnnotations.
        Key feed-back from Bryan Hunt, John Logdson and Thomas Eskenazi.
      - Added new HTTPS server connector based on the internal non-blocking 
        NIO connector. Co-developped with NetDev.
    - Bug fixed
      - Fixed potential NPE in the Authenticator when logging authentication 
        failure. Reported by Martin Svensson.
      - Fixed potential NPE in ClientAdapter#commit(...) and generated
        GWT proxies when no entity is returned. Reported by Cyril Lakech.
      - Fixed potential NPE in BioUtils#copy() with one of the stream is null.
        Reported by Cyril Lakech.
      - Fixed character encoding bug with internal HTTP connectors with 
        2 bytes characters (accents, etc.). This might have caused troubles
        in other parts of the framework as it was located inside the
        BioUtils.getOutputStream(Writer) method. Reported by Laurent Rustruel.
     - Misc
      - Optimized the HeaderReader class beavhior in the engine.
      - Optimized the processing of extra headers and challenge schemes. 
        Contributed by Scott S. McCoy
      - Updated GWT server library to version 2.3.0.
      - GWT client proxy generator now uses "Impl" instead of "Proxy" for
        the automatically generated class, preventing confusion when the
        annotated interface already ends with "Proxy".
        Suggested by Cyril Lakech.
      - Generation of GWT client proxy now stops when it detects usage of 
        annotations that don't come from the Restlet edition of GWT.
        Suggested by Cyril Lakech.
      - Clarified Redirector Javadocs to explain more clearly the differences
        between various options. Suggested by Cyril Lakech.
      
- 2.1 Milestone 5 (06/21/2011)
    - API changes
      - Moved SslContextFactory and DefaultSslContextFactory classes from 
        internal to public org.restlet.ext.ssl package.
      - Renamed Status#getName() method to getReasonPhrase() for more clarity
        regarding the purpose of the additional "description" property used
        for lengthier explanations.
      - Added Response#isFinal() and isProvisional() methods, based on
        Status#isInformational().
      - Added MediaType.MESSAGE_HTTP constant.        
    - Enhancements
      - Added OAuth 2.0 and OpenID 2.0 extensions that have been maturing
        in the incubator for a while after a contribution by Ericsson Labs.
        Contributed by Kristoffer Gronowski and Martin Svensson.
      - Updated and consolidated the SSL/HTTPS configuration parameters
        for all HTTPS connectors.
      - Added a warning message to indicate that an application without a 
        parent component can't handle outbound calls by default.
        Reported by John Logsdon and Kristoffer Gronowski.
      - Allowed change of the parent context of a VirtualHost via the
        setContext() method.
    - Bug fixed
      - Fixed compatibility issue with GWT 2.3.
      - Fixed potential NPE in Restlet class when no context is available.
      - Fixed potential NPE in LogFilter. Reported by Aaron Summers.
      - Fixed parsing of HTTP requests with internal connector when the
        Host header was missing. Now falling back to IP address.
        Reported by Aaron Summers.
      - Fixed misleading log message when response are manually ranged
        (206 status and entity with range set). Reported by John Logsdon.
      - Fixed issue causing blocking of internal HTTP/SIP connector when 
        the entity was coming from Apache HTTP client.
      - Fixed issue causing potential loop in internal HTTP/SIP client
        when the response entity wasn't being consumed immediately.
      - Fixed issue causing potential IndexOutOfBounds exceptions.
      - The internal server (HTTP and SIP) now automatically exhausts the 
        request entity if it hasn't been consumed after the writing of the 
        final response.
      - The internal connector now calls back the ConnectorService methods.
      - The internal server now calls back Representation#release() method
        after sending an entity.
     - Misc
      - Updated Jetty to version 7.4.2.
      - Added Awaitility and Hamcrest libraries required by the OAuth 
        extension.

- 2.1 Milestone 4 (04/27/2011)
    - API changes
      - Added protected redirect(...) and retry(...) methods on on ClientResource
        to facilitate extension of default behavior such as passing on cookies.
        Suggested by Martin Svensson.
      - ClientResource#entityBuffering now buffers non transient representations of
        unknown size. Necessary for GAE chunked issue.
      - Added Server#getActualPort() to return either the value of getPort()
        or getEphemeralPort() is the listening port is '0'.
      - Message#attributes is now a ConcurrentMap instead of a Map.
        Suggested by Tal Liron.
      - ClientResource now respects any change to the clientInfo preferences
        when using dynamic proxies (via wrap() for example). It only overwrites
        them if the default preferences state (empty lists) is found at invocation
        time. Suggested by Christoph Dietze.
      - The visibility of several methods on UniformResource and ClientResource
        has been changed to public.
      - Added Protocol#SDC and ChallengeScheme#SDC constants for the 
        Secure Data Connector protocol.
    - Enhancements
      - Added new HTTPS client connector based on the internal non-blocking NIO
        connector. Co-developped with NetDev.
      - The SDC protocol to connect to intranets from the cloud is now also 
        supported on the GAE edition via the org.restlet.ext.net extension. It 
        automatically sets the "use_intranet" HTTP header and increases the
        portability of your code between Restlet/GAE and other Restlet editions. 
        As SDC is natively supported on GAE, it doesn't require the 
        org.restlet.ext.sdc extension.
      - Added a new GAE extension for the GAE edition. It provides a dedicated
        authenticator based on the GAE UserService feature.
        Contributed by Matt Kennedy.
    - Bug fixed
      - Throwing a ResourceException with a given status, was resulting in
        500 status being returned to the client instead of the given status.
        Reported by Avi Flax and Rhett Sutphin.
      - Fixed bug with unlimited IO timeouts in internal HTTP connector.
        Reported by Michael Guiral.
    - Misc
      - The simplified logging formatter (one line) is now available only in
        the Java SE edition as it could cause troubles with Java EE container
        and potentially GAE/Android as we reconfigure the default log manager
        programmatically. Reported by Kristoffer Gronowski and Bo Xing.
      - Moved all SSL dependencies from the engine into the "org.restlet.ext.ssl"
        extension, forcing it as a new extension for several other ones such as
        Jetty, Apache HTTP Client or Simple. This extension takes more importance
        as it also contains the new scalable HTTPS/NIO internal connector just
        added. Please ensure that your classpath is adjusted. This also helps
        keeping core org.restlet.jar size small.

- 2.1 Milestone 3 (03/31/2011)
    - Breaking changes
      - The new support of GWT 2.2 is not backward compatible with applications 
        based on previous versions of GWT.
    - API changes
      - Deprecated the Client#connectTimeout property as it is hard to find
        compared to other connector parameters. Also, it isn't available for
        all connectors so it can be confusing to expose it.
        Use the "socketConnectTimeoutMs" connector parameter instead or
        the "maxIoIdleTimeMs" parameter for internal NIO connectors.
      - Deprecated the Engine#setInstance() method to favor the 
        Engine#register() ones which wrap logging initialization logic
        and added an Engine#clear() method to discard it altogether.
      - Added an getResponseLogMessage(request, response, duration) method to 
        LogService class so it can be easily overridden/customized. Also
        added a protected getDefaultResponseLogMessage(..) method returning the
        default IIS log message.
      - Added Representation#setReadListener() method to facilitate the setting
        of listeners interested in new content available for reading for 
        selectable representations.
      - Added higher level NIO event listeners in org.restlet.util package:
        InputListener, ReaderListener and StringListener.
      - Created a com.google.gwt.server library dedicated to the 
        org.restlet.gwt extension. This library will be shipped with the 
        JSE, JEE, GAE editions.
      - Added Message#onError callback invoked by the internal connector.
        Especially useful to detect if an outbound response failed to be
        written at the connector level.
      - Deprecated TunnelService#setHeaderTunnel() in favor of the new
        setHeadersTunnel() method.
      - Fixed default value of "maxQueued" for the internal connector to ensure
        threads are properly created up the the "maxThreads" value entered.
        Reported by Kristoffer Gronowski
      - Added new Series#getValuesArray(...) method variants.
      - Added ClientResource#maxRedirects property to prevent infinite 
        redirects, in addition to the existing infinite loop detection.
        Suggested by Henry Story.
      - Added ClientResource#requestEntityBuffering, responseEntityBuffering
        Boolean properties and setEntityBuffering(boolean) method in order to
        make transient entities reusable (retry attempts, chunk encoding issues
        with GAE, response entity reuse).
    - Enhancements
      - Keep alive empty lines between messages in a persistent connections are
        now eat silently. Reported by John Logsdon.
      - Refactored the internal NIO connector to better support the differences
        between HTTP and SIP protocols regarding transaction management.
      - Added a new SDC extension providing a client connector for the 
        Google Secure Data Connector protocol compatible with the official SDC 
        agent.
    - Bugs fixed
      - Fixed bug preventing persistent connections reuse when an entity is
        present. Reported by John Logsdon.
      - Fixed potential issue with double consumption of SIP ACK messages. 
        Reported by John Logsdon.
      - Fixed issue with asynchronous responses and provisional responses
        preventing the resue of persistent connections. 
        Reported by Phil Dunks.
      - Fixed NIO connector (HTTP and SIP) bug potentially causing infinite
        loops. Reported by John Logsdon and Phil Dunks.
      - Fixed SIP methods INFO, SUBSCRIBE and SUBSCRIBE to allow responses.
        Reported by Phil Dunks.
      - Fixed NIO connector regression potentially blocking a connection if 
        all the entity couldn't be read from the socket in one shot.
      - Fixed Directory bug when handling conditional requests.
    - Misc
      - If the Engine#logFormatter is set to null, the log formatter of the
        console is not changed anymore.
      - Updated Jackson library to version 1.7.1.
      - Added an "org.restlet.engine.helper" attribute to expose the internal
        helper instance used by a Client or Server instance. Could be 
        leveraged in advanced cases for instrumentation purpose for example.
        Suggested by John Logsdon.
      - Updated Jetty library to version 7.3.0.
      - Updated GWT library to version 2.2.0.
      
- 2.1 Milestone 2 (12/24/2010)
    - API changes
      - The org.restlet.service.TaskService is now a ScheduledExecutorService
        capable of running delayed commands at fixed intervals for example.
        Suggested by Kristoffer Gronowski.
      - JsonRepresentation(Map<Object,Object>) signature changed to the more
        precise JsonRepresentation(Map<String, Object) one.
        Suggested by Tim Peierls.
      - Facilitating the creation of ClientResource subclasses by changing
        the visibility of handle(...) methods from private to protected.
        Leveraged by the SipClientResource in the SIP extension.
        Reported by Phil Dunks.
    - Enhancements
      - Added Request#loggable property, LogService#isLoggable(Request)
        method and LogService#loggableTemplate to enable selective request 
        logging. Suggested by John Logsdon.
      - Added setters with String parameters in addition to Text ones to
        the Feed and Entry classes.
      - Added an EncoderService to automatically compress sent entities
        on both client and server side. Disabled by default on Application.
      - Added UniformResource#requestCacheDirectives and 
        responseCacheDirectives properties.
      - Added UniformResource#doError(Status) and doError(Status, msg)
        methods to allow interception and customization of the default
        behavior (such as throwing a ResourceException on the client-side).
        Suggested by Florian Bucklers.
      - Added a new SIP extension providing support for the Session 
        Initiation Protocol, largely used for voice over IP. This new
        extension ships both client and server SIP connectors over TCP,
        reusing the 90% of the logic used by the new NIO/HTTP internal
        connector, providing excellent scalability and performance.
      - Simplified the default console logging by replacing Java's default
        verbose log formatter by a single line formatter. This formatter
        can be modified via the static Engine#logFormatter property.
      - Added easy programmatic control of log configuration via 
        Engine#logLevel and restletLogLevel static properties.
        If regular log configuration is used via system properties, it 
        is taking over for backward compatibility.
      - In addition to java.util.logging.SimpleFormatter, two new ones are
        added: org.restlet.engine.log.SimplerFormatter and the new default
        org.restlet.engine.log.SimplestFormatter.
      - Removed TraceHandler class, replaced by configurable ConsoleHander
        formatters.
      - Improved the precision of log messages, for example giving the list
        of template variables matched and their value. 
        Suggested by John Logsdon.
      - Optimized routing when 0 characters are matched on an URI template.
      - Added IoUtils.TIMEOUT_MS constant to globally configure I/O related
        timeouts. Its value is 60 seconds by default, but can be configured
        via the "org.restlet.engine.io.timeoutMs" system property. 
      - Added server-side support for Amazon Web Services (S3) authentication.
        Contributed by Jean-Philippe Steinmetz.
      - Added support for DecoderService on the client-side as well.
      - Implemented the automatic filtering of outbound services, via the
        Application#outboundRoot property.
      - Added ConfidentialAuthorizer to limit access to resource to secure
        protocols such as HTTPS.
    - Bugs fixed
      - Fixed writing of big representations. Reported by Tom Andersson. 
      - Fixed IoUtils.BUFFER_SIZE constant to be properly configurable via
        the "org.restlet.engine.io.bufferSize" system property. 
        Reported by Tom Andersson.
      - Fixed auto-detection of XStream annotations. 
        Contributed by Bruno Grieder.
    - Misc
      - Moved UniformResource#doCatch() logic down to ServerResource as it
        was specific to server-side and kept a simpler log trace.
      - Made TCP socket reuse active by default on internal connector.
        Reported by John Logsdon.
      - Lowered log traces for Directory. Suggested by Rickard Oberg.       
      - Moved exception to status conversion logic from UniformResource and
        ServerResource doCatch() methods to the StatusService.
        Suggested by Rhett Sutphin.

- 2.1 Milestone 1 (11/07/2010)
    - API changes
      - Removed deprecated classes and code.
      - The Route class has been reintroduced with a lighter
        behavior not depending on URI templates.
      - Added an UniformResource#setApplication() setter to be able
        to explicitly set the parent application used to pick up the
        ConverterService or MetadataService. This property is also 
        carried on by the copy constructor. Suggested by John Logsdon.
      - Added UniformResource#toString() for easier debugging.
      - Added Representation#isSelectable() and getRegistration() method
        to manipulate the registration of the NIO channel with its 
        associated selector and received asynchronous notifications
        of available content.
      - Deprecated Application#setClientRoot, renamed into a 
        setOutboundRoot method.
    - Enhancements
      - Improved the naming of files created by the FILE local 
        connector so that media type extension comes at the end.
      - Added a fully new non-blocking NIO/HTTP connector in the engine, 
        in replacement of the previous one based on blocking BIO. 
        It has much better performance (latency, throughput and 
        scalability) and supports persistent connections and chunked
        encoding.
    - Misc
      - Removed the Grizzly and Netty extensions which were still 
        considered experimental at this point. The new internal
        connector based on non-blocking NIO now provides similar
        advantages and is already more complete from a HTTP coverage
        point of view. Users of these connectors are encouraged to
        leverage the NIO internal connector or the two other extensions
        that are still available in 2.1 (Jetty and Simple connectors).
      - Added library GWT 2.1.0, removed support of GWT 2.0.