Restlet Changelog

What's new in Restlet 2.2.0 Stable

Mar 28, 2014
  • Java 6 foundation
  • Apache License 2.0
  • Internal HTTP client and server now based on JDK Net classes:
  • reduced size by 45Kb for org.restlet.jar
  • recommended Android HTTP client by Google
  • moved previous internal connector to new NIO extension
  • Added Guice extension, Google’s dependency injection library
  • Added Swagger extension (only JAX-RS API support for now)
  • Added Thymeleaf extension for templating
  • Added GSON extension, supporting Google’s JSON serialization library
  • Added HTTP PATCH method support
  • Added JSONP filter to workaround single origin policies in browsers
  • Updated Jackson extension to support additional media types:
  • JSON, Smile (JSON binary), XML, YAML and CSV
  • Updated OAuth extension to final 2.0 RFC (preview):
  • added client support for HTTP OAuth MAC authentication
  • Updated JAX-RS extension with client support (not JAX-RS 2.0 based)
  • Updated OSGi extension with inter-bundle OBAP:// pseudo-protocol
  • Revamped User Guide with easier navigation and content update:
  • most broken links due to Daisy wiki migration were fixed
  • “Edit” button linked to GitHub for easy maintenance
  • Converter exceptions are now properly transmitted
  • Added Javadocs artefacts to Maven repository
  • Updated over 25 dependencies (Jackson, Jetty, Apache HTTP Client)
  • Many bug fixes

New in Restlet 2.1.7 (Feb 19, 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.
  • Fixed issue #821: status reason phrase set by the Jetty connector.
  • Fixed issue #823: Service-Component header missing in manifest.mf for servlet extension.
  • XEE injection security fix. Issue #826. Reported by Alvaro Munoz.
  • OData not passing null when property not marked nullable, issue #663.
  • Android ICS: needs fixing for HttpUrlConnectionCall.getResponseHeaders, issue #548.

New in Restlet 2.1.6 (Feb 19, 2014)

  • Bug fixed:
  • Fixed issue #809 regression introduced when handling issues #774 and #778.

New in Restlet 2.1.5 (Feb 19, 2014)

  • Bug fixed:
  • Fixed issue #791, EncoderService exposed size-fixed lists of ignored and accepted media types.
  • Fixed issue #784, that leads to a maladjusted exception.
  • Fixed issue #649, if needed, add base64 padding characters to encoded md5 hash before decoding.
  • Enhancements:
  • Added support of nowrap "deflater" (support of GZIP compatible compression), issue #786.
  • Added ability to override Accept-encoding header values #654.
  • WritableSocketChannel whould write in loop to ensure all data been written, issue #783.

New in Restlet 2.1.4 (Feb 19, 2014)

  • Bug fixed:
  • Fixed issues #774, #778 - Removed default support of JavaBeans XML-deserialization, binary-deserialization on ObjectRepresentation class.

New in Restlet 2.1.3 (Feb 19, 2014)

  • 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.
  • 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.
  • Fixed issue #774 - Removed default support of JavaBeans XML-serialization.
  • Fixed issue #778 - Removed default support of JavaBeans binary-serialization.
  • Misc:
  • Added log warning when an authentication scheme does not define a "realm" parameter.

New in Restlet 2.1.2 (Feb 19, 2014)

  • 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.
  • Fixed JaxRsApplication(Application) constructor with a JaxRsRestlet adapter.
  • Fixed NPE while issuing 405 responses in the JAX-RS extension.
  • 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.
  • Fixed bug when chaining Transformer or TransformRepresentation objects. Reported by Brian Sletten.

New in Restlet 2.1.1 (Feb 19, 2014)

  • Bug fixed:
  • Fixed arrays serialization in GWT edition.
  • 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.
  • Took care of the IPV6 addresses. Reported by Laurent Rustuel.
  • Add missing implementation in BufferingRepresentation for issue #681.
  • Added support of multiple levels of $expand in OData extension.
  • Fixed potential infinite loops while reading headers
  • Reported by Wei Wei Wang.
  • Fixed reading of Via header
  • Strict conneg should evaluate media type parameters
  • Fixed CookieAuthenticator which should redirect the user's browser to the getLoginFormPath() when the credentials are missing or stale
  • Misc:
  • Prevent logging of verbose stack trace. Reported by Grzegorz Godlewski.

New in Restlet 2.0.0 (Feb 19, 2014)

  • Restlet editions:
  • After targeting standalone Java SE virtual machines and Java EE web containers in version 1.0, we introduced a manual port to GWT in version 1.1. During the development of version 2.0, we jumped on two new bandwagons launched by Google - Android for web connected smartphones and tablets; GAE for cloud computing hosted applications
  • As each port required a lot of manual maintenance, we developed a special Restlet forge including a fully automated port mechanism that allows us to work on a single code base while taking into account the specificities of each target environment.
  • As a result, the framework is now available in five consistent editions covering the most popular Java-based platforms.
  • Package restructuring:
  • While maintaining an easy migration path from version 1.1, we took the opportunity of this major release to reorganize Restlet extensions, moving “com.noelios.restlet.ext” packages into “org.restlet.ext” ones, merging the “com.noelios.restlet.jar” into a single core “org.restlet.jar” including both the Restlet API and the core engine.
  • Enhanced Restlet API:
  • We completed our support for HTTP headers, mapping almost all standard ones to the Restlet API as illustrated in this mapping table and also introduced a higher level way to develop Restlet resources that works equally well on both client and server side.
  • Those new ServerResource and ClientResource classes support the traditional class-oriented approach previously used in Restlet and added on top of it using custom Java annotations, providing the benefits of the JAX-RS API (that we keep supporting as a Restlet extension) but with much less annotations (just 5 currently) and a rich and extensible Java API as a solid foundation.
  • As a result, you can use representation beans that can get automatically serialized to and from XML, JSON, GWT object, Java object formats thanks to extensions such as Jackson, XStream, JiBX or JAXB.
  • We also added a brand new security API that supports HTTP centric authentication and authorization in simple yet extensible way, for example with extensions for the JAAS, jSSLutils and javax.crypto APIs.
  • OData extension
  • A new extension for OData technology was added, thanks to a collaboration with Microsoft Interop teams. It provides a high-level client API based on the ClientResource class that lets you access remote OData services, typically hosted in an ASP.NET servers or on the Windows Azure cloud computing platform.
  • The extension contains both a code generator for the representation beans and a runtime layer. Advanced features such as projections, blobs, server-side paging, row counts, customizable feeds or version headers are supported.
  • RDF extension:
  • We also want to make Restlet a great framework for building applications for the Semantic Web. The relationship between REST and RDF is perfect : the core concept of resources and their representations with REST and the expression of meaningful links between them with RDF.
  • This new extension contains a full RDF API, leveraging the Restlet API, and capable of processing RDF documents either in a DOM-like way or in a SAX-like way. It is also capable of writing large RDF documents is a SAX-like way. We currently support two serialization formats: RDF/XML, RDF/n3, Turtle and N-Triples. Finally, a RdfClientResource class facilitates the hypermedia navigation in the Web of Data.

New in Restlet 1.1 Milestone 2 (Mar 1, 2008)

  • Fixed NPE in Connector class.
  • WriterRepresentation was missing a default implementation for getReader() abstract method.
  • If an error is found in HttpClientHelper.sendRequest(), StreamClientHelper ignores it and continues to parse the response when it should stop processing.
  • Status.isSuccess(), is*Error(), isRedirection() and isInfo() methods now support status classes as specified in HTTP 1.1.
  • The request ClientInfo address and port were not available for the default connector and the Grizzly connector.
  • Fixed issue in SpringHost preventing usage of the setRoutes(Map) method. Replaced with a setAttachments(Map) method. Added Javadocs example.
  • ResourceException wasn't setting a message.
  • Representation.isAvailable() now returns false if the size is '0'.
  • Refactoring of HTTP server connectors code to better deal with HEAD request, 1xx, 204, 205, 304 status codes.
  • Ensured all modifiable collections are properly documented in the API.
  • Fixed Spring XML loading issue related to validation in SpringContext class.
  • Fixed bug with the FileClientHelper returning wrong list of variants.
  • Fixed bug in Tag.equals() implementation.
  • Fixed NPE in the WAR client of the Servlet extension.
  • Caught exception with Simple connector when flushing a closed stream. Now it is logged at a lower priority.
  • Fixed NPE in the MediaTypes class.
  • Fixed bug in SpringComponent preventing setting of clients.
  • Fixed several bugs related to Grizzly (chunked encoding not working, restarting NPE, etc.).
  • Added support for Alpha-numerical sorting of index pages in Directory.
  • New setComparator, setAlphaComparator and setAlphaNumComparator methods added. The default sorting is now "AlphaNum".
  • Added new JsonRepresentation constructors taking a Bean or a Map.
  • Updated Spring to version 2.5
  • Updated db4o to version 7.0
  • Added a new parameter to ServerServlet allowing specification of a custom component to instantiate.
  • Synchronized some list setters on Component and Connector with explanation in Javadocs.
  • Guard.checkSecret() method now has a Request parameter.
  • Added new constructors to CookieSetting.
  • Filter.beforeHandle() and doHandle() methods can now indicates if the processing should continue normal, go to the afterHandle() method directly or stop immediately. IMPORTANT NOTE: as it isn't possible to add a return parameter to an existing method, the change can break existing filters. In this case, you just need to return the "CONTINUE" constant from your method and use "int" as return parameter.
  • Added Handler.getQuery() method to easily return the request's target resource reference query as a parsed form (series of parameters).
  • Added a Reference.clone() method.
  • Added more fine-grained lifecycle for Components with new start*() and stop*() methods.
  • Added the ability to specify a hostname verifier for the HTTPS client based on JDK's net package.
  • Improved robustness of Reference when starting with an empty URI.
  • Added Component.updateHosts() method to update the routes after dynamic changes to virtual hosts.
  • Added format(Object) and resolve(Object,String) methods to Template to allow for custom variable resolution.
  • Added new Spring NRE extension containing a SpringServerServlet facilitating the Servlet Spring Restlet trio integration.
  • New classes that give even more integration option (RestletFrameworkServlet, SpringBeanFinder and SpringBeanRouter).
  • Added "defaultMatchingMode" property on Router.
  • Added "throwable" property to the Status class, respecting the immutability.
  • Added "getEphemeralPort()" method on Server to get the local port actually used by the system when the "port" property is set to '0'.
  • Made the inner Template.VariableResolver interface and "format(VariableResolver)" method public.
  • Added JiBX extension, alternative to JAXB.
  • Added support for nested resources in WadlComponent.
  • Resources with no variant set now log a warning on GET requests.
  • Added static Representation.createEmpty() method to return a new empty representation.
  • Added Variable.TYPE_URI_PATH to match any path character except in the query or fragment parts.
  • Updated and tested the Atom extension to conform to the latest APP specifications. The extension currently allows to retrieve an APP Service Document and Atom Feeds.
  • Added MediaType.APPLICATION_ATOM_SERVICE_XML constant.
  • Lowered the logging level for some Simple IO exceptions.
  • Updated JSON JAR to latest version.
  • Externalized mappings between file extensions and media types in the MetadataService.
  • Closed an open BufferedReader in IdentClient class,
  • Updated FreeMarker to version 2.3.12.
  • Added support for DIGEST authentication (client and server side).
  • Added a WadlApplication class and refactored the WadlComponent to support many more usage scenarios:
  • WadlApplication instances can now be added to existing components.
  • WadlApplication instances can be modified to add filters in front of the root router
  • WADL description documents can be retrieved via HTTP or other protocols
  • Only the necessary client connectors are automatically created
  • Added TEXT_JAVASCRIPT media type constant.
  • Added MediaType.getMostSpecific(), isCompatible() and isConcrete() methods. Contributed by Stephan Koops.
  • Guard is now setting a Principal instance after authorization.
  • Refactored engine to support pluggable authentication.
  • Updated Grizzly to version 1.7.2
  • Added Engine.copyResponseHeaders() method.
  • Handlers now return a SERVER_INTERNAL_ERROR instead of CLIENT_NOT_FOUND when no next Restlet is
  • attached to them.
  • Added Engine.formatCookie(), formatCookieSetting() and equivalent parse*() methods.
  • Deprecated Status.isInfo(), replaced by isInformational() to follow HTTP naming.
  • Updated HTTP server connectors behaviour in the purpose to avoid the sending of entity when the entity is empty, when the status explicitely forbids the sending of entity (e.g. 1xx, etc), or when the method must not send entity (e.g. HEAD).
  • Updated HTTP client connectors behaviour in the purpose to close aggressively the connection in several identified cases when the status explicitely forbids the sending of entity (e.g. 1xx, etc), when the method must not send entity (e.g. HEAD), or when the Content-Length header's value is 0.
  • Ensure that the headers of the response's entity will be retrieved even if no message body has been sent (in this case, an empty representation is created).
  • Tutorial examples based on applications are now runnable with the Servlet adapter.
  • Removed unecessary 'synchronized' keyword on Application.createRoot() and added one to the setRoot() method.
  • RIAP request are now considered confidential when dispatched.