=========== Changes log =========== - 2.0.15 (2012-08-23) - Bug fixed - Fixed bug in Reference#getParentRef with relative URIs. Reported by Christian Bauer. - Fixed closing issue with pipes used by BioUtils.getReader and getInputStream methods. - Fixed concurrency bug upon application start or strop that could cause errors such as "no Restlet defined to process calls. Maybe it wasn't properly started" errors (500). Reported by several persons including David Fuchs, Danny Leshem, Yunwu Zhu and Bjorn Roche. - Fixed range issue that leads to generate a Response having a Content-length greater than actual content with range request. - Fixed potential security issue that allows Javascript injection inside entities of error reponses. Reported by Danny Leshem. - Fixed potential threading/pipe issues with OutputRepresentation and WriterRepresentation classes. - Fixed range computation issue. - Fixed Turtle BNode parsing (RDF extension). Contributed by Christophe Gueret. - MemoryRealm now copies the properties from the reference user in the realm to the User object set in Request.clientInfo. Reported by Peter Ansell. - SecretVerifier now consider two 'null' secrets as not comparable. - Fixed client proxy media type preferences, when repeated calls are done, which may lead to a status 413 response. - Fixed case sensitivity issue with query parameters in JAX-RS extension. Reported by Mark Kharitonov. - 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. - Added log traces in case of error with custom status representation. - Improved DateUtils's Javadocs with clear formatting hints. - 2.0.14 (2012-05-23) - 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. - Usage of ranges on representations having unknown size. Reported by Bjorn Roche. - Fixed missing JSON media type with converter service and the JSON extension. - Optimized conversions using the Jackson extension in order to reuse configuration (issue #577). - Fixed security bug in the XML extension that allows XML external entity attacks. Reported by Nicolas Grégoire, Caleb James DeLisle and Fabio Mancinelli. - 2.0.13 (2012-04-18) - Bug fixed - Fixed user agent name detection for Firefox 12 on Windows. Reported by Tim Peierls. - Fixed issue with content negotiation in the JAX-RS when multiple Accept preferences were expressed by the client. Reported by Vincent Massol, Fabio Mancinelli, Anca Luca. - 2.0.12 (2012-04-06) - 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. - Relaxed content type header parsing in case of a trailing semicolon. Reported by Jean-Baptiste Dusseaut. - Fixed handling of Put requests with Jax-Rs extension without any mime type. Reported by Thomas Mortagne. - 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. - 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 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. - Misc - Updated FreeMarker library to version 2.3.19. - 2.0.11 (2012-01-25) - Bugs fixed - Fixed MediaType.includes(MediaType) which returned true with the other type was null. Reported by Try Lam. - Improved OData client speed by caching costly reflection calls, especially on Android. Contributed by Nikhil Purushe. - Fixed conversion bug with asynchronous annotated interfaces when a Result parameter is declared. Reported by Bill Claypool. - Fixed conversion of request entities by ClientResource using response variants. Reported by Arjohn Kampman. - Fix the GWT edition, client requests using HTTP_BASIC authentication scheme did not generate Authorization header. Reported by Koen Maes. - 2.0.10 (2011-10-05) - Bugs fixed - RDF/XML writing wasn't properly factoring statements from the same source reference. - SaxRepresentation wasn't writing the wrapped SAX sources. Added logic to write(XmlWriter) method. Reported by Raif S. Naffah. - Fixed potential NPE in Adapter#getLogger() method. Reported by Avi Flax. - Removed unused namespaces declaration in RDF/n3 and Turtle writers. - Removed extra empty line generated by XmlWriter at the top of docs. - Lowered level of log messages in the internal connector when a connection is broken from warning to fine as it could be the result of a simple SHIFT+F5 browser reload. - Exceptions while writing RDF were not properly traced, leading to hard to debug issues. - Fixed the DIGEST authentication, when reusing a valid digest ChallengeResponse for a distinct resource. Reported by Steve Ferris. - Fixed FreeMarker optional OSGi dependency on Servlet. Reported by Warren Janssens. - 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. - Fixed parsing of form with empty parameters. Now their value is "" instead of null. Reported by Arjohn Kampman - 2.0.9 (2011-08-20) - Bugs fixed - Fixed severe log messages produced by the Component class due to lack of child context usage. - Fixed potential IO issue by adding missing calls to flush() methods in Writer and OutputStream. Reported by Jeroen Goubert, Konstantin Pelykh. - Fixed potential NPE in Velocity's TemplateRepresentation. Reported by David Hamilton - Fixed bug failing to properly clear the service filters of a Component when stopped. Reported by Jean-Pascal Boignard. - Fixed parsing issue with invalid HTTP Basic credentials, when length of Base 64 value isn't a multiple of 4. Contributed by Ray Waldin. - Fixed conversion of representations to instances of primitive type using the default converter. - Fixed handling of binary data in OData extension. Reported by Nikhil Purushe. - Fixed a bug in the default converter that lead the latter to take precedence over specialized converter when converting incoming representations. Reported by Glenn Bruns. - Fixed potential NPE in the GWT edition. Reported by Cyril Lakesh. - Added warning message when an unexpected error happen during the invocation of an asynchronous callback. - 2.0.8 (2011-06-21) - Bugs fixed - AbstractJaxbProvider, JaxbRepresentation and JibxRepresentation used TreeMap which required Comparable implementation and isn't synchronized. Replaced with ConcurrentHashMap. Reported by Julien Landure - Fixed regression introduced in 2.0.7 with WriterRepresentation, OutputRepresentation and subclasses when sending long entities (1024 and longer). Reported by Tim Peierls. - Fixed Range issue when handling large files. Reported by Tom Moore. - Fixed potential NPE in FreeMarker ContextTemplateLoader. - The Content-Disposition header was never retrieved using external server connectors. - Misc - 2.0.7 (2011-04-27) - Bugs fixed - Optimized support of JAXB in the JAXRS extension in case the org.restlet.ext.jaxb extension is present in the classpath. Reported by Julien Landure. - Amazon S3 authentication could fail due to new subdomain names like "s3[a-z0-1\\-]*.amazonaws.com". - Fixed bug with the testing of equality of Roles in RoleAuthorizer. Reported by Tim Peierls. - Fixed issue with dormant threads in some IO operations due to excessive thread pool instantiation (via TaskService). Now a single temporary thread is used when an existing TaskService can't be found. - Apache HTTP Client was processing cookies like a browser while as a Restlet client connector it shouldn't have done so, like for other connector such as the internal client. Reported by Kristoffer Gronowski and Martin Svensson - Fixed bug with the testing of equality of Roles in RoleAuthorizer. Reported by Tim Peierls. - Misc - Clarified in log trace the need to manually register connector helpers on the Android edition. - 2.0.6 (2011-03-31) - Bugs fixed - Fixed Redirector when the targer URI is on a distinct domain. Reported by Guido Schmidt. - Fixed potential issue in ClientResource regarding the actual entity being resent in case of error. - Misc - Clarified default property values of the TunnelService class. - 2.0.5 (2011-02-09) - Bugs fixed - Fixed bug in virtual host router that was failing if no host URI was set. Now falls back to the host part of the resource URI. - Fixed handling of "EDM Single" properties. Reported by Andreas Taube. - Fixed ClientResource#put(Object,MediaType) and #post(Object,MediaType) methods of the GWT edition. Reported by Charlie Mason. - Fixed bug causing first entity byte to be eaten if the connection wasn't persisting. Reported by Sebastien Gaide and Olivier Miel. - Fixed potential NPE with conditional requests. Reported by Carolyn Duby. - Fixed potential race issues in internal HTTP connector under high load. Reported by Leandro Oliveira. - Fixed bug with AWS S3 authentication due to wrong insertion of HTTP headers. Reported by Sebastien Gaide. - The GWT proxies generated at compilation time weren't setting their preference for the GWT object serialization format. - 2.0.4 (2010-12-24) - Bugs fixed - Extension headers on responses were now supported by the JAX-RS extension. Reported by Jim Stabile and fix suggested by Simon Temple. - Invalid log traces for connectors without protocols, such as dispatchers, were removed. - Fixed AccessControlException caused by an unnecessary call to System.getProperties(). Reported by Matthias Reichl. - The JAXB extension now has better support for classloader. Contributed by Eric Hough. - Fixed the writing of the Via header. Reported by Guido Schmidt. - Fixed annotation processing on XStream deserialization. Contributed by Bruno Gieder. - Fixed parsing of complex types in the OData extension. Reported by Alex Bass. - Fixed potential IndexOutOfBoundsException when receiving chunked content. Reported by Mark Thornton. - Fixed ROME 1.0 JAR to use the latest version. - Fixed scoring issues between the Atom and XML extension for the Feed and Service classes which extend the SaxRepresentation classes. - Fixed converter issues with the ROME extension. - Fixed SpringBeanFinder throwing misleading exceptions when resource not found. Contributed by Rhett Sutphin. - Fixed double-instantiation of prototype resources in SpringBeanRouter. Reported by George Calm and contributed by Rhett Sutphin. - Fixed status description lost when throwing ResourceException inside the deprecated Resource class. Reported by Rhett Sutphin. - Fixed ConnegUtils#getPreferredMetadata algorithm. Reported by Rickard Oberg. - Fixed lack of "Vary" HTTP header with HEAD calls on the ServerResource class. - Request with no entity are now detected at connector level when non persistent connections are used without setting the Content-Length header properly either. Reported by David Fogel. - Fixed parsing of Warning header. Reported by John Logsdon. - Fixed support of GWT 2.1. - 2.0.3 (2010-11-07) - Bugs fixed - Fixed Representation#availableSize computation issue when total size is unknown and fixed ranged entity writing. - Fixed generation of GWT proxies. Reported by Evan Wang. - 2.0.2 (2010-11-03) - Bugs fixed - Fixed bug in Netty HTTPS connector preventing the handling of several connections, persistent connections and chunked encoding. Reported by Laurent Rustuel. - Fixed issue with Netty when an unknown parameter was passed. - Fixed content negotiation issues with methods accepting Representation parameters or returning Representation instances. Reported by Dustin Jenkins. - Fixed potential thread blocks due to CountDownLatch.await() calls. They now properly time out. Suggested by Tim Peierls. - Fixed initialization of the ClientInfo#userAgentTemplates static variable. Reported by Michael Terrington. - Fixed the Content-length header sent by HEAD responses. Reported by Nicolas Rinaudo. - Fix bug with automatic redirects by Directory when the URI contains query parameters. Reported by William Pietri. - Internal HTTP client now uses absolute URIs for proxies requests. - Redirector supports relative URIs again. Contributed by Marc Portier. - Fixed bug when using the internal client in Sun Applet Viewer. Reported by Darin Jackson. - Fixed bug when an URI was included in the URI query or fragment. - Fixed the deserialization of Java objects when using the internal client or server connectors. The final and empty chunk was not read. Reported by Rob Kooper. - Fixed serialization of String parameter in the GWT edition. Reported by Brian Cabana. - Fixed the usage of Collection as entity in the GWT edition. Reported by Evan Wang. - Fixed bug in ObjectRepresentation preventing the writing of </java> at the end of entities with media type "application/x-java-serialized-object+xml". Reported by M. Maksin. - Fixed usage of 405 and 415 statuses during content negotiation. Reported by Doug Smalley and Avi Flax. - Misc - Additional errors are now caught and logged in the HTTP servers. Contributed by Marc Portier. - Updated Jetty to version 7.1.6. Suggested by Marc Portier. - Updated Netty to version 3.2.2. - Optimized writing from NIO channels to BIO output streams. - Updated Simple to version 4.1.20. - Added support of GWT 2.1. The behaviour of the log API introduced in GWT 2.1 may not work as expected according to the GWT documentation. - 2.0.1 (2010-09-08) - Bugs fixed - When cloning the prototype request, the ClientResource wasn't copying the ClientInfo#user property. - Fixed the setting of the Request's rootRef attribute when using the RIAP protocol. Reported by Tal Liron and Tim Peierls. - Fixed content negotiation issue in the Servlet extension and all HTTP connectors except the internal one. - Fixed the deserialization of unavailable entities in the GWT edition. - Fixed serialization of String objects in the GWT extension. - Allowed to filter serialized types in the GWT client proxies generated. - Fixed potential entity reading issue with Grizzly HTTP server. - Fixed the internal client connector when a connection cannot be found to send a request. - Added missing createRequest(Request), createResponse(Request) methods in the ClientResource class. - Optional authentication keep request in neutral state: neither authenticated neither unauthenticated. Reported by Bruno Harbulot. - Fixed RangeRepresentation which was incorrectly modifying the wrapped representation. Reported by David Fogel. - The ServerServlet now wraps the Servlet input and output streams to prevent them from being closed, especially once the response has been returned to the container as it could be reused and impact another call. Suggested by Alois Cochard. - Removed Message#finalize() calling release() at GC time which can have side-effects that are hard to isolate, especially in Servlet environments. Reported by Giovani Pieri. - Throwables wrapped in ResourceExceptions can now get a custom status via the StatusService. Reported by Olivier Miel and Olivier Monaco. - Fixed potential NPEs in converters such as the JSON extension converter. Reported by Alexander Kampmann. - Fixed potential conversion issues due to lack of preference setting (Request#clientInfo#acceptedMediaTypes property) on the ClientResource based on the available converters. New ConverterService#updatePreferences() method was added with a similar (optional) method on ConverterHelper. - Fixed bug in ConnegUtils#getPreferedMetadata() causing the quality level to be ignored. Reported by Daniel Zhelyazkov. - Reduce the number of OSGi imported packages for the Jackson extension. Suggested by Jean-Luc Geering. - Removed the support of FTP protocol of the net client connector. Reported by Christophe Vanfleteren. - Misc - Updated Grizzly library to version 1.9.19. - Improved concurrency for TunnelFilter.AcceptReplacer. Contributed by Tim Peierls. - Clarified Javadocs of Context#getServerDispatcher(). Suggested by Alex Milowski. - Added missing parsing capability to the ROME extension. - Added description of the status in the default error representation. Suggested by Fabian Mandelbaum. - 2.0.0 (2010-07-19) - API changes - When an annotated method manually sets the response entity, if this entity is available then it will be preserved and the result of the annotated method ignored. Suggested by David Fogel. - Added missing JaasUtils#doAsPriviledged(..) methods. Contributed by Bruno Harbulot. - Added Encoder#getSupportedEncodings() method to allow customization. - Added WadlApplication#createHtmlRepresentation(ApplicationInfo) to allow for customization of HTML representation. - WadlApplication#getApplicationInfo and #wadlRepresent methods are now protected instead of public. - WadlApplication#title property is now deprecated. Use the common Application#name and #description property instead which are now used by default. - Renamed "htmlConvert.xsl" file into "wadl2html.xslt" in WADL extension JAR. - Added static ResourceInfo#describe(ResourceInfo, Object, String) method in WADL extension to factorize logic. - Status service now logs exceptions caughts. - Added static Method#sort(List<Method>) method. - Renamed WadlServerResource#title into "name" property and added "description" property. - Added WadlServerResource#createWadlRepresentation(...) and createHtmlRepresentation(...) methods. - Added RepresentationInfo#reference property to support representation "href" attributes. - Added describe(Class<?>, Variant) method on WadlServerResource to allow for custom documentation. - Added describeAnnotations(MethodInfo, ServerResource) static method on MethodInfo. - Renamed WadlServerResource#autoDescribed into autoDescribing. - The private WadlServerResource#describe(ResourceInfo) method is now protected. Also renamed getParametersInfo() method into describeParameters(), and isDescribable(Method) into canDescribe(Method) for naming consistency. Also added the describe(ApplicationInfo) method to allow updating the parent application description, to add global representations for example. - The WadlDescribable interface now passes an ApplicationInfo instance as parameter to the getRessources() method so the global properties can be updated if necessary. - Moved ClientResource#toRepresentation(...) and toObject(...) methods up to UniformResource, so that they can be overridden in ServerResource subclasses as well. - Upon garbage collection, if a Restlet instance is still started its stop() method is now automatically called for clean-up purpose. - Request and responses now call their release() method upon garbage collection. It releases any associated entity. - Increased default value for "maxConnectionsPerHost" parameter of the Apache HTTP client extension. Suggested by David Fogel. - Bugs fixed - Thread local variables are now cleared correctly. Prevented unloading of WAR files or OSGi bundles using Restlet. Reported by Felix Leipold, Dustin Jenkins and Rickard Oberg. - Fixed generation of client proxies in the GWT edition, when the annotated method declares an entity as a Representation instance. - Fixed handling of non ASCII characters in the GWT edition when running in hosted mode. Reported by Giovani Pieri. - Removed XML header in JSON documents produced by XStream. Reported by Louis Huh. - Empty representations (with a size of 0) are considered again as not available. Reported by David Fogel and Eric Hough. - The log service now logs "0" instead of the entity size when this entity isn't effectively sent (204 or 304 status). - Atom feed and entry readers now set the media type of the inline content. Reported by Martin Svensson. - Fixed bug in relative references computation. Contributed by Tal Liron. - Client connectors automatically created by the ClientResource are now automatically stopped upon garbage collection to prevent dormant threads. Reported by Dustin Jenkins and TK Kocheran. - Parameters on Attachments in Component's XML configuration were not taken into account. Contributed by Alex Milowski. - Fixed bug avoiding the usage of HashMap in annotated interfaces in the GWT edition. Reported by Greg Hengeli and Christopher Gokey. - Removed the "default" attribute for the matching mode of attachments in the Component XML configuration. Reported by Alex Milowski. - Atom feed parser wasn't parsing "summary" elements. Reported by Guillermo Vega and fixed by Vassilis Touloumtzoglou. - Made JaasUtils.createSubject(ClientInfo) static. Reported by Bruno Harbulot. - Fixed NPE when requesting via the RIAP protocol. Reported by Alex Milowski. - Application#outboundRoot wasn't properly taken into account by the ClientResource class. Reported by Kristoffer Gronowski. - JAX-RS extension wasn't setting new cookies properly. Reported by Sriram Chavali. - Fixed issue with services which weren't getting their context properly set and updated. Reported by Iestyn Evans. - Fixed regression in WadlApplication that prevented the retrieval of WADL description when OPTIONS was called on "/" or "" URIs. - Fixed WADL generation to not add an empty response element when no WADL response info is provided. - Fixed Variant#equals(), VariantInfo#equals(), AnnotationInfo#equals(). - Removed duplicate representations in WADL description and representation with abstract media types. - ServerResource#updateAllowedMethods() now clears the response property before updating it. Caused troubles with the WadlApplication discovery logic. - Fixed potential NPE in ServerConnection#writeMessage. Reported by Tim Kuntz. - When selecting an annotated method, if the request has an available entity, now the Java methods without an input parameter are rejected. - ConverterService don't return non concrete media types anymore. - Fixed internal connectors in order to ensure that connections are closed when the controller is shutdown. - Fixed writing issue with JiBX extension. Reported by Aleskandr Shekhter. - Fixed character encoding issues in JAX-RS extension. Reported by Alistair Dutton and Jeroen Goubert. - Fixed GWT's ObjectRepresentation constructors for serialization to not conflict with deserialization constructors when a string is passed as parameter. Reported by Alexander J. Perez Tchernov. - InputRepresentation#getText() now closes the underlying stream. Reported by David Fogel. - Representation#exhaust() now closes the underlying stream used. Reported by David Fogel. - Enhancements - Improved performance of the Reference#isValid(char) method. Suggested by Guillaume Maillard. - Added generics support in annotated resources, for example when calling ClientResource#wrap. Suggested by Valdis Rigdon who also contributed a unit test and solution ideas. - Misc - Component#main() now accepts related XML configuration file paths. Contributed by Alex Milowski. - Updated jSSLutils to version 1.0.5. - Clarified Javadocs of the WADL extension. - Reduced max threads default value from "255" to "10". Suggested by Tim Peierls. - Improved precision of variants detection of annotated methods. Positive impact on WADL descriptions. - WadlApplication is now capable of describing more precisely ServerResource subclasses and not just WadlServerResource ones. Request and response representation variants are described. - 2.0 Release Candidate 4 (2010-06-01) - API changes - Changed character oriented subclasses of OutputRepresentation to extend WriterRepresentation instead for consistent character set handling. - StringRepresentation now derives from CharacterRepresentation. - WriterRepresentation now uses HTTP's default character set when no one is provided (ISO 8859-1). - Added missing ServerResource#abort() method. Reported by Tal Liron. - Deprecated the GwtShellServletWrapper as the hosted mode has been removed in GWT 2.0. Reported by Rob Heittman. - Fixed design of the Engine class to allow custom subclasses to be registered without systematically creating a new EngineClassLoader. The classLoader and userClassLoader properties are no longer static. A createClassLoader() method was added as well as a static getResource(String) : URL one. Reported by Bruno Harbulot. - Deprecated WadlResource. Use WadlServerResource instead. - Added get/setRouter methods and deprecated getSpringBeanRouter in the SpringBeanFinder class. Reported by Thierry Templier. - The status name is now returned to clients for display instead of the description, in order to not expose internal information by default for security reasons. Reported by Marc Knaup. - Added the System property "org.restlet.engine.io.buffer.size" that allows to set the buffer size for all instances of the BufferedReader class. - Bugs fixed - Fixed character encoding issues (XStream, Jackson, JAXB, etc.) - Adjusted Jackson configuration as it was automatically closing the target stream/writer, not respecting the Representation#write() contract. - XStream detection of annotations was only working for JSON, not for XML representations. Reported by George Calm. - Conversion of empty entities to Form instances. Reported by Jean-Baptiste Dusseaut. - Fixed implementation of JaasVerifier to provide the User and Roles principals to the JAAS Subject before login and to retrieve the User if no one exist and a principal user classname is provided. Contributed by Bruno Harbulot. - Fixed bug preventing MessageBodyReader/Writer implementors from being recognized as providers. Contributed by Martin Krasser. - Fixed constructor DigestAuthenticator(Context,String,String) to properly take into account the "serverKey" parameter. Reported by Yang Xudong. - Fixed support of inherited annotated methods by ServerResource. Reported by Kevin Pauli. - Fixed potential NPE in HttpBasicHelper. Reported by Myriam Leggieri - Fixed potential NPE in SpringBeanFinder#getContext() and Reported by Thierry Templier. - Fixed HttpClient client connector for the Android extension. - Fixed conversion bug with annotated methods returning void. Reported by Pierre-Yves Ricau. - Fixed bug in DigesterRepresentation#getText() not working as expected. Reported by Bruno Harbulot. - Fixed bug in OData extension when parsing complex properties. Reported by Roger Heim. - Fixed Generator class in OData extension when the service URI is actually to be redirected. - Fixed bug causing several starts of the HTTP client connector. Reported by Matthew Drooker and Arun Kumar Sharma. - Fixed instantiation of BufferedInputStream and BufferedOutputStream using the constructor with size. Reported by Matthew Drooker. - Fixed optional Authenticator. Reported by Jean-Philippe Steinmetz. - Misc - Server connectors now display the port they are listening on in their start message. - Optimized by a factor 10, the speed of the getStream() method in StringRepresentation, using a ByteArrayInputStream. - Improved ServerResource and Finder Javadocs with lifecycle information. Suggested by Alex Milowski. - Added links from API packages to user guide (wiki). Suggested by Alex Milowski. - OData Generator now uses the current directory by default if none is provided via arguments. - 2.0 Release Candidate 3 (2010-04-23) - API changes - Replaced MemoryRealm#findRoles(Set<Group>, User) method by findRoles(Set<Group>), findRoles(Group) and findRoles(User) to clarify contract. Suggested by Brunon Harbulot. - Added proxy configuration to the internal client connector (necessary for the sip connector). - Added "ftl" extension to MetadataService for FreeMarker templates. - Keeped few MediaType constants for the GWT edition in order to reduce size. - Bugs fixed - Fixed support of parameters with the MediaType class. The name contains the the main and sub types, plus the parameters. Reported by Carsten Lohmann. - Fixed generation of GET request sent by the internal connector just after a request with an entity. - Moved ServletUtils class introduced in RC2 into the org.restlet.ext.servlet package. - Fixed potential NPE with the Extractor. Reported by Graham Smith. - Fixed parsing of "nc" parameter and fixed potential endless loop in HttpDigestHelper. Reported by Mark Drew. - Fixed issues preventing multi-threaded usage of ClientResource and dynamic client proxies. - Fixed concurrency bug with annotated interfaces causing 405 errors (method not allowed). Reported by Antonio Fiestas. - Fixed regression about the method filtering (ignore case). Reported by Jean-Baptiste Dusseaut. - Fixed bug in HttpDigestVerifier which didn't create the User into the request's ClientInfo property. Reported by Bruno Harbulot. - Prevented threads to block when other requests's entities are not consummed. - Allowed to set entity headers even when conditions are not fulfilled with GET and HEAD request. Reported by Leigh Klotz. - XStream annotations are now automatically detected. Suggested by Dan Simpson. - Fixed support of HTTPS by the internal client connector. - Fixed support of conditions on non-GET methods. - Fixed generation of ChallengeResponse instances for DIGEST authentication scheme. - Allowed Verifier to indicate that an identifier doesn't exist. - Fixed internal connector for Android edition. - Enhancements - Added support of request#onSent and #onResponse callbacks for the net and httpClient extensions. - 2.0 Release Candidate 2 (2010-03-30) - API changes - Left an unspecified key stores 'null' to prevent troubles with HTTP client connectors. Contributed by Bruno Harbulot. - Deprecated the getters for the keystore-related attributes in each connector. Lets these values be read from the DefaultSslContextFactory (which is initialized with the same attributes as the individual connectors were using). Contributed by Bruno Harbulot. - User and Role classes now implement java.security.Principal interface. Removed UserPrincipal and RolePrincipal classes from the JAAS extension. The JaasUtils#createSubject() now also adds the ClientInfo#principals entries. Suggested (in part) by Bruno Harbulot. - Added ServletUtils class to the Servlet extension with two methods to easily retrieve the Servlet request/response. - Bugs fixed - Fixed HeaderReader#addValues method. Reported by Carsten Lohmann. - Fixed the resolver hash model provided by the Freemarker extension when underlying resolvers return TemplateModel values and allowed access to Freemarker configuration shared variables. Reported by sirthias. - Fixed the StringWriter implementation for the GWT edition. Reported by Kelly McLaughlin. - Fixed potential bug with ATOM mappings (customizable feeds feature). Reported by Thomas Conté. - Fixed generation of HTML representations for WADL resources. Reported by Carsten Lohmann. - Fixed formatting of Date instances for the GWT edition. Reported by Kelly McLaughlin. - Fixed support of latin1 characters in credentials for the HTTP_BASIC scheme. - ResourceException caught by UniformResource where not setting the response status properly, always using a 500 status code. Reported by Tal Liron. - Fixed issues with local conversions using RIAP for example. Now, the object converters (default, JAXB, JiBX, XStream, Jackson and GWT) know about to retrieve the wrapped local object without serializing/deserializing it. Reported by Valdis Rigdon. - Fixed support of latin1 characters in writing headers. - Internal client connector was always pipelining requests. - Fixed support of generic types and arrays for the GWT edition. - Fixed handling of Cookies. Reported by Rob Heittman. - Fixed potential NPE in DimensionReader class. Reported and contributed by Rob Heittman. - Fixed parsing of multi valued "www-authenticate" headers. - Fixed redirecting the internal server connector to file URIs. - Misc - Updated Simple framework library to version 4.1.20. - 2.0 Release Candidate 1 (2010-03-15) - API changes - Added a Router#getMatchingMode(Restlet) method which returns the default matching mode for the Router, except for target that are instances of Directory or Router, where the MODE_STARTS_WITH value is returned. Reported by Rhett Sutphin and Masaki Sudo. - Added Router#detach(Class) method. Suggested by Martin Kubincanek. - Added conveniency constructors to Atom classes. - Added new Relation constants in the Atom extension. - MediaType#getParent() now returns the same media type without parameters if some parameters are present. - Refactored Redirector. Renamed MODE_CLIENT_DISPATCHER into MODE_SERVER_OUTBOUND and MODE_SERVER_DISPATCHER into MODE_SERVER_INBOUND. Renamed redirectClientDispatcher() into outboundServerRedirect(). Renamed redirectServerDispatcher() into inboundServerRedirect(). Expose serverRedirect() method as protected. - Engine's BioUtils#write(InputStream, OutputStream) method was renamed to copy(...). - Removed all Client#get/post/put/... methods not present in Restlet 1.1. - Refactored XML extensions to share XPath evaluation logic. Added XmlRepresentation#getInputSource() abstract method. - Removed dependency from JAXB and JiBX extensions to the XML extension. JaxbRepresentation and JibxRepresentation aren't extending XmlRepresentation anymore due to the small added value. - Deprecated JaxbRepresentation#getSaxSource() method and added the getJaxbSource() method instead. - Deprecated JaxbRepresentation#getInputSource() and JibxRepresentation#getInputSource() methods. - Added TransformRepresentation#toSaxSource(), transform(Source, Result) and write(Result) methods for easier extension. - Added default constructor to SaxRepresentation. - Renamed org.restlet.ext.xml.NodeSet into NodeList as it is really a List<Node> implementation. - Deprecated the XmlRepresentation#evaluate(...) method, using the get*(String) methods is easier. - Deprecated the XmlRepresentation#putNamespace(...) method. - Added an XmlRepresentation#setNamespaces(Map<String, String>) method. - CLAP scheme now supports a default authority corresponding to the "class" authority for shorter URIs. - Added LocalReference#createClapReference(int, Package) and createClapReference(Package) static methods to help building CLAP URIs. - StatusService#getStatus(Throwable, Request, Response) doesn't log an error anymore. - Added a Transformer#canTransform(Representation) method to prevent systematic transformation. Returns true by default. - Deprecated JaxbRepresentation#getInputSource() method. - Made JaxbRepresentation#getContext() method public. - Deprecated JibxRepresentation#encoding property in favor of the parent Variant#characterSet property. - Added JacksonRepresentation#setObject(T) method. - Renamed JsonRepresentation#indentSize into indentingSize. - Deprecated JsonRepresentation#toJson*() method with logic similar to equivalent getJson*() ones. - Added new constructors for FreeMarker's TemplateRepresentation using a default Configuration instance. Also added getter and setter for the "template" variable. - Renamed Jetty parameter "lowResourceMaxIdleTimeMs" into "lowResourcesMaxIdleTimeMs". - Added Expectation data class and Request#expectations property to support "100-continue" headers to optimize sending of large request entities. - Renamed Variant#identifier property into "locationRef" to more close match HTTP terminology. - Added org.restlet.data.RecipientInfo class and property Message#recipientsInfo, supporting the "Via" HTTP header. - Enhancements - UniformResource#doCatch now extract the cause exception from caught ResourceException instance for easier debugging. - The Request#abort() method is now supported by the Simple, Grizzly, Netty, Jetty and the internal HTTP server. Reported by Nicolas Rinaudo. - Response#onSent callback now called by other HTTP server than the internal one. - Added BioUtils.delete(...) methods to delete files and directories, recursively if needed, while working around Windows file locking issues. - Moved up the documentation on Resolver data model for Restlet calls at the top of Javadocs. Suggested by Tal Liron. - SSL session IDs are now provided as an attribute of requests. The attribute name is "org.restlet.https.sslSessionId". Suggested by Stefan Meissner and contributed by Bruno Harbulot. - Added support of projections to the OData extension. - Added support of server-paging to the OData extension. - Added support of media link resources (blobs) to the OData extension. - Added support of row count to the OData extension. - Added support of customizable feeds to the OData extension. - Added support of generation and parsing of request/response version header to the OData extension. - Added support of service operations to the OData extension. - Added support of SetLink method to the OData extension. - Added support of NTML secured services to the OData extension. - Bugs fixed - Fixed compilation issue in the ClientResource class for the GWT edition. Reported by Laszlo Megyer. - Fixed internal client connector that removes the query part of the target resource reference. Reported by Laurent Rustuel. - Fixed internal connector that was not setting properly the ServerInfo. Reported by Laurent Rustuel. - Fixed regression when tunnelling user agent properties. Reported by Fabian Mandelbaum. - The 0 value of the "TimeToLive" parameter for the client connectors was badly taken into account when setting the expiration date. Reported by Fabian Mandelbaum. - Issue with line breaks that were removed when PUTting a file. Contributed by Daniel Truemper. - Precondition check was wrong for 'if-unmodified-since' if dates were equals. Reported by Andreas Schneider. - Updated MANIFEST.MF files to not declare the "Uses" fields for the exported packages. Reported by Bryan Hunt. - Fixed MediaType#toString(). Reported by Carsten Lohmann. - WadlApplication wasn't exposing the default route of routers. Reported by John Wismar. - WadlApplication wasn't exposing the default route of routers. Reported by John Wismar. - Fixed usage of Component configured by XML inside servlet containers. Reported by Zsolt Czinkos. - Allowed Redirector to plug to another protocol. Reported by Tal Liron. - Fixed if-none-match conditions ("*" value). - Fixed computation of the ServerResource#rootRef member. Reported by Nirav Shah. - Fixed bug using annotated interfaces declaring simply a "GET" method in GWT client. Reported by Xavier Mehaut. - Client HTTP connectors were not automatically resolving relative URI references with a given base URI. Reported by Rickard Oberg. - Fixed conversion issue when using XstreamRepresentation and similar classes in annotated methods' signature. - Fixed Reference#decode and encode methods for the GWT edition. Reported by Harald Pehl. - Fixed potential threading issues on Message/Request/Response regarding collections in asynchronous processing mode. Based on feed-back from Tim Peierls. - Fixed missing parsing of the "Accept-Ranges" header to populate the ServerInfo#isAcceptingRanges() property. - Misc - Removed Representation#getDigester* methods. There is no reason to favor this way to wrap a Representation. - Updated db4o library to version 7.12.132. - Updated Grizzly library to version 1.9.18i. - Updated Spring framework library to version 3.0.1. - Updated GWT library to version 2.0.3. - Updated Jackson library to version 1.4.3. - Updated Jettison library to version 1.2. - Updated Jetty library to version 7.0.1.v20091125. - Updated FreeMarker library to version 2.3.16. - Updated JiBX library to version 1.2.2. - Updated JUnit library to version 4.8.1. - Updated Simple framework library to version 4.1.19. - Updated SLF4J library to version 1.5.11. - Updated Apache Commons Codec library to version 1.4. - Updated Apache Commons Collections library to version 3.2.1. - Updated Apache Commons DBCP library to version 1.3. - Updated Apache Commons Lang library to version 2.5. - Updated Apache Commons Pool library to version 1.5. - Updated Apache HTTP Client library to version 4.0.1. - Updated Apache HTTP MIME library to version 4.0.1. - Updated Apache Lucene library to version 2.9.2. - Updated Apache Solr library to version 1.4.0. - Updated Apache Tika library to version 0.6. - Updated Apache Velocity library to version 1.6.3. - 2.0 Milestone 7 (2010-01-29) - API changes - Added more specific Validator#validatePresence and validateFormat methods. - Added Protocol#SIP and SIPS constants. - Added Response#abort() and Request#abort() methods. - Added Response#commit() and Request#commit(Response) methods to support provisional responses and asynchronous replies. - Added Response#autoCommitting and committed boolean properties for asynchronous processing of responses. - Added Status#isGlobalError() methods for 6xx range (SIP protocol). - Removed "onContinue" property on Message introduced in 2.0 M6 until real use cases are identified. - Added Protocol#technicalName property to indicate the actual name used on the wire, such as "HTTP" for Protocol#HTTPS. - Added Request#maxForwards property mapping to the HTTP header "Max-Forwards". - Renamed Context#verifier and enroler to defaultVerifier and defaultEnroler. - Added lifecycle support to Realm and Component#realms. - Refactored Component with an extensible "services" property and added a new ServiceList class for factorization purpose. - Moved Response#onReceived to Request#onResponse. - Added protocol helpers that registers protocols's methods. - Added MediaType.APPLICATION_XMI_XML constant and "xmi" extension into MetadataService. - Client preferences were not taken into account with annotated methods returning beans with multiple variants available. - Added new Server(Protocol) constructor. - Renamed Application#findRole(String) into getRole(String). - Renamed Component#findRealm(String) into getRealm(String). - Renamed Extractor#extract*() into extractFrom*(). - Component#main() now expects a full URI reference instead of a local file path for more flexibility (CLAP and HTTP URIs). - Removed the Simple, Jetty, Netty extensions from the Java EE edition of Restlet. - Renamed ServletAdapter#target property into "next". - Enhancements - Added a new Jackson extension, with transparent conversion between JSON representations and objects. Suggested by Tal Liron. - Adjusted scoring in DefaultConverter for Form objects and in XstreamConverter for objects with unspecified target media type. - ServerResource now rejects unconvertible parameters with a 415 status. - ServerResource now supports empty POST and PUT requests. - Added converter of FreeMarker Template objects in the FreeMarker extension. - Added converter of Velocity Template objects in the Velocity extension. - Added converter of Graph objects in the RDF extension. - Added converter of Syndfeed objects in the ROME extension. - Added converter for the JiBX extension. - Added converter for Message objects to representations in the JavaMail extension. - Added converter for WebRowSet, JdbcResult, ResultSet objects to representations in the JDBC extension. - Added support of the Data Services extension in Android. - Added Restlet object serialization for the GWT edition, leveraging GWT's deferred binding mechanism and GWT-RPC serialization format. - Added a context's attribute to requests coming from the Servlet extension: "org.restlet.ext.servlet.offsetPath". Proposed by Carsten Lohmann. - Added support for additional marshalling properties to the JAXB extension. - Added support of Chrome browser when tunneling with user agent. Suggested by Jonathan Hall. - Added support connection timeout for Apache HTTP client. Contributed by Sanjay Acharya. - Replaced the default HTTP connectors (StreamClientHelper and StreamServerHelper) with a new implementation supporting persistent connections, provisional responses (1xx status), asynchronous request and response handling (via the Response#commit(), Request#onReceived() and Message#on*() callback methods). Significant feed-back from NetDev and especially John Logdson. - Improved routing log by also displaying the next Restlet of the selected route in addition to the URI template. Suggested by John Logdson. - Implemented Request#toString() and Response#toString() to display something similar to HTTP request and status lines. Suggested by John Logdson. - In the default access logs, the identifier of the user attempting to authenticate is now logged. Suggested by John Logdson. - VirtualHost#serverPort is now matched against the request's protocol default port if the ServerInfo#port value is unspecified (-1). - Dynamic client proxies created from ClientResource#wrap(Class) or create(Class) or getChild(Class) or getParent(Class) methods now automatically implement the ClientProxy interface and can therefore retrieve the underlying ClientResource instance if needed. Based on feed-back from John Logdson. - Added support of requests pipelining. - Added Service#context property. - Added Component(String) constructor for XML configuration. - Completed XML configuration XSD scheme to match more of Restlet API. - Added LogService#logPropertiesRef to easily read log properties from a URI at start time. - Added setDefaultAttachment() method to SpringHost and SpringRouter. - Updated component configuration parsing logic. - Bugs fixed - Fixed issue in DomRepresentation with createTransformer() method. Fix contributed by Remi Dewitte. - Validator#validate() method was protected instead of public. Reported by Ben R. Vesco. - Fixed issue in Validator causing an error when a non required attribute is not found. Reported by Laurent Rustuel. - Fixed NPE when parsing "Date" header in the GWT edition. - Fixed issue with automatic setting of 204 when no entity was available and the status was 200. The logic has been moved from the HTTP server connectors to the ServerResource. Reported by Bruno Harbulot. - Relaxed tunneling of user agent string. Reported by Erick Fleming and Fabian Mandelbaum. - Fixed potential infinite loop when getting the Engine instance. - Fixed RepresentationContext#getCharacterEncoding method in the fileupload which did not return the character set. Reported by Carsten Lohmann. - Fixed potential NPE in engine's LogFilter class. Reported by Jeff Ramsdale. - Fixed potential BufferOverflowException in NbChannelOutputStream. Reported by David Fogel and Iestyn Evans. - Fixed internal client connector which didn't refresh entity properties from headers values. Reported by Taylor Cowan. - Allowed to set the DATE header. - Fixed support of chunked response in the Netty connector. Reported by Laurent Rustuel. - Removed ServletLogger adapter for the GAE edition due to the fact that the Logger class cannot be inherited. Reported by Cedric Hurst. - Misc - Updated Simple framework library to version 4.1.17. - Deprecated Message#getEntityAs* methods. - Updated GWT library to version 2.0. - Updated WADL extension according to new WADL specification. - Improved thread safety of MapVerifier. Reported by Tim Peierls. - Updated Apache HTTP Client to version 4.0.1. - 2.0 Milestone 6 (2009-11-20) - API changes - Renamed ChallengeScheme#HTTP_MS_SHAREDKEY into HTTP_AZURE_SHAREDKEY and HTTP_MS_SHAREDKEY_LITE into HTTP_AZURE_SHAREDKEY_LITE. - DataServices.Session#getMetadata() now returns on Object to prevent link to internal class. - Upgraded the "org.restlet.ext.httpclient" extension to leverage Apache HTTP Client 4.0. WARNING: some parameters were renamed due to API changes. - Refactored for simplification the security API introduced in previous Restlet 2.0 milestones. - The Organization class was removed and its "rootGroups" and "users" properties were moved to MemoryRealm. - The Permission class was removed as it isn't necessarily the best way to enforce fine grained authorization. - The RealmService class was removed and the "realms" property moved to Component. - The ClientInfo#subject property was replaced by "user : User", "roles : List<Role>" and "principals" to remove the JAAS dependency. - A new JAAS extension was added, where the JaasVerifier, DefaultCallbackHandler, UserPrincipal and RolePrincipal classes where moved. - Verifier now uses ClientInfo as parameter instead of Subject. - Added a "name" property to Realm and a findRealm(name) to Component. - Added JaasUtils class with a createSubject(ClientInfo) static method. Suggested by Rickard Oberg. - Enroler and Verifier are now interfaces. Suggested by Rickard Oberg. - Added new Digest#ALGORITHM_HTTP_DIGEST constant for A1 field as specified in RFC 2617. - Renamed HttpDigestAuthenticator into a more generic DigestAuthenticator. - Made the HTTP DIGEST work again on the server-side, via DigestAuthenticator. Issue reported by Carsten Lohmann. - Refactored engine's AuthenticatorHelper to facilitate the support of alternative server-side schemes such as S3. - Renamed RestletSolrQueryRequest to SolrRestletQueryRequest. - Renamed RestletSolrParams to SolrRestletParams. - Renamed Application#getRole() into findRole(). - Added "next" property to Server and deprecated "target" for more naming consistency with filters. - Added conveniency constructors to Server. - ResourceException is now a RuntimeException to facilitate its usage with dynamic proxies created by ClientResource#create() static methods and wrap() methods. - UniformResource#doCatch() now logs throwable with different levels depending on the type of errors. - Added additional methods like post(Object, MediaType) that return a Representation to ClientResource. - The Router class now has those default values: - "defaultMatchingMode" : MODE_EQUALS instead of STARTS_WITH - "defaultMatchQuery" : false - "routingMode" : FIRST instead of BEST Note that for easier configuration, the router detects the attachment of Directory instances and automatically uses a MODE_START_WITH mode in this case. - Added "org.restlet.ext.crypto" extension including many digest related features such as Amazon S3 and Azure client HTTP authentication. This removes the dependency from the Restlet core to javax.crypto. - Improved the Resolver class to expose call attributes as objects instead of string for easier integration with template engines such as FreeMarker. - Moved the OAuth extension to the incubator as it needs to go through a complete redesign with proper documentation. - Renamed routing mode constants of Router to follow the MODE_*_MATCH pattern such as MODE_BEST_MATCH instead of BEST. Deprecated older values. Suggested by Arjohn Kampman. - Added asynchronous support in the Restlet API for all editions. New "onContinue" and "onSent" callback properties added to the Message class. New "onReceived" callback property added to the Response class. Exposed those properties in the ClientResource and ServerResource classes. Added asynchronous methods to the Client class like the GWT edition already had. - Refactored the GWT edition to be more inline with the other editions. Especially, we ported the ClientResource class. - Added ClientInfo#from property corresponding to the "From" HTTP header. - Added Response#age and #retryAfter properties corresponding to the "Age" and "Retry-After" HTTP headers. - Added Message#date property corresponding to the "Date" HTTP header. Suggested by Carlos Alexandre Moscoso. - Added org.restlet.data.Warning class and Message#warnings property corresponding to the "Warning" HTTP header. - Added HTTP warning status codes to the Status class. - Added org.restlet.data.CacheDirective class and Message#cacheDirectives property corresponding to the "Cache-Control" HTTP header. - Added support of CacheControl header. - Properly exposed HTTP Digest properties in the ChallengeRequest and ChallengeResponse classes. Added a parent ChallengeMessage class. - Added org.restlet.data.AuthenticationInfo class to support preemptive HTTP DIGEST authentication. Initially contributed by Kelly McLaughlin. - Added support of the If-Range header. - Translated the packages of the gwt edition from org.restlet.* to org.restlet.gwt.*. - Bugs fixed - Fixed bug when the deprecated method "createRoot" is implemented instead of the "createInboundRoot". Reported by Fabian Mandelbaum. - ServerResource#getVariants() now returns an empty list instead of null when no annotation is present. Reported by Tal Liron. - Annotated methods returning a String, a StringRepresentation or a Reader were only exposing a "text/plain" variant even though most other media types are acceptable like JSON, XML. - Fixed bug in ServerResource when content negotiation was disabled, all non standard methods where invoking the OPTIONS method. - Fixed ClientResource to throw ResourceException upon error as specified in Javadocs. Reported by Patrick Logan. - ClientResource was not checking the "followRedirects" property. - Fixed bug when sending entities with the GWT edition. - Fixed bug when normalizing References with the GWT edition. Reported by Guido Schmidt. - Fixed OSGi dependency issue with the JAX-RS extension. Reported by Stefan Maassen. - The rootRef attribute of a request was not set when handled by the Component's internal router. Reported by Emily Toop. - Fixed bug with conditional methods in ServerResource when no variant is available. - ServerServlet life cycle is now correctly propagated to the embedded Restlet component and applications. Reported by Rickard Oberg. - Fixed issue with OSGi bootstrap that failed to register the converters. Reported by Adam Harrison. - Fixed NPE in ChallengeCallbackHandler when challenge response is null. Reported by Georges-Etienne Legendre. - Fixed NPE in the dataservices extension due to bad parsing of referential constraints. - Fixed potential exceptions raised when an XML document is parsed using the default characterset instead of the parsed document's one. - Fixed bug that prevents the SimpleWeb server connector to retrieve the values of identical headers in the request. Reported by Arjohn Kampman. - Fixed update of entities in the dataservices extension, due to the generation of a wrong entity. Reported by Simon Guest. - Fixed issues with SSL test cases. Contributed by Bruno Harbulot. - Fixed bug with the setIdent method of class DomRepresentation. - Fixed manifest files varying by editions. Reported by Thierry Templier. - Fixed bug in OSGi activator causing default converters not to be registered. Reported by Bryan Hunt. - Fixed SpringBeanRouter and SpringBeanFinder to ensure that the context is available in the target resources. Reported by Dustin Jenkins. - Fixed ClassCastException in the Series#getValuesArray(String, boolean) method. Reported by Arjohn Kampman. - Updated SpringFinder Javadocs to mention the need to use create() as a lookup-method instead of createResource(). Reported by Kevin Pauli. - Enhancements - Improved JAXB converter. Contributed by Sanjay Acharya. - Added library jcip-annotations 1.0. - ServerSevlet now automatically supports the declaration of several adapters in the same web.xml. Reworked the Javadocs to encourage usage of Servlet init parameters instead of context parameters. - Refactored connector extensions to move implementation classes in "internal" packages hidden from the Javadocs. - The default status page and directory listings are now using a sans-serif font. - Add support for annotations values separated by a ":" and "|" characters. Suggested by Bob Resendes. - Added Netty extension containing an HTTP server connector based on this NIO client/server framework developed at JBoss. Contributed by Gabriel Ciuloaica. - Added support for result set paging in JDBC client connector. Contributed by Warren Janssens. - Restlet#name property now uses toString() as a default value and Filter uses this property in its log traces. - Improved Context#getLogger() to cover cases where the class's canonical name is empty like for anonymous classes. - The FreeMarker TemplateFilter is now more flexible with a createDataModel(Request, Response) method that can be overridden and a "dataModel" property with getter and setter. - Life cycle events are now propagated in all the Restlet routing system (filters, routers, virtual hosts, etc.). Suggested by David Fogel - Added a LoggerFacade class and a related property on the Engine to allow the replacement of the default JULI logging mechanism. - Added an SLF4J extension with a LoggerFacade for the Restlet Engine providing an optimal bridge to SLF4J. - Added HTTP/HTTPS proxy configuration support to the Apache HTTP Client 4.0 extension. Contributed by Bruno Harbulot. - Added the Net client extension to the Android edition (without the FTP connector though). - Response with a 200 (success, ok) status and no content now log a fine trace instead of a warning and automatically change the status to 204 (success, no content). - Added support of the Warning header. - Added support of the ranges in the GWT edition. - Added support of the Authentication-Info header. - Added support of "inline" disposition type in the Content-Disposition header. This is based on the value of the "downloadable" attribute of the Representation class. Proposed by Paul Austin. - Added support of automatic redirections by instances of ClientResource for unsafe methods. - Misc - Added Velocity template in the org.restlet.example project. Reported by Ben Vesco. - Updated Apache Commons Logging to version 1.1.1. - Updated Simple framework library to version 4.1.15. - Updated GWT to version 1.7.1. - Updated Jetty to version 7.0.0. - 2.0 Milestone 5 (2009-09-28) - API changes - Moved Message, Request and Response classes from the org.restlet.data to the org.restlet package as they are core artifacts of the API used in Uniform interface. - Deprecated Redirector.MODE_DISPATCHER to introduce support for MODE_CLIENT_DISPATCHER and MODE_SERVER_DISPATCHER. - ServerResource#getPreferredVariant() is now protected. - Moved Template and Variable classes from "org.restlet.util" to "org.restlet.routing" package. - Moved Restlet#handle(Request) method to Client class. - Added "inboundRoot" and "outboundRoot" properties to Application and deprecated the "root" property and the createRoot() method. The outbound root, is the hook for client-side routing and points by default to the context's client dispatcher, but can be changed by the user to do custom routing/filtering. New createInboundRoot() and createOutboundRoot() methods can be overriden. - The ServerResource#getVariants() method now returns a modifiable list of variants instead of a map. - Refactored the ServerResource class so that annotated methods are invoked through the regular get(), get(Variant), post(), post(Variant) methods instead of using a separate call path. - ServerResource now has protected getConverterService() and getMetadataService() methods. - Bugs fixed - Added Simple extension to the JEE edition. Reported by Dustin Jenkins. - Fixed bug detected in the CharacterSet class when running in the MacOS context. Reported by John Logsdon. - Removed the TaskService from the GAE edition as we are not allowed to create threads. Reported by Olivier Bruchez. - Fixed POM dependencies groupId. Reported by Remi Dewitte. - Fixed potential bug with RangeInputStream causing 100% CPU utilization with java NIO. Reported and contributed by Tal Liron. - Router#attachDefault() method now relies on the protected createRoute() method. Reported by Rob Heittman. - Fixed potential synchronization issues. - Fixed concurrency issue with annotated methods that could result in wrong methods invoked. Reported by John Logsdon. Isolation of issue by Filip Hanik from the Tomcat team. - Improved robustness of internal HTTPS client with trust stores. Suggested by Bruno Harbulot. - Fixed bug that would prevent the GWT callback from being called if some exception occured. - Fixed integration issue with Tomcat due to the GC releasing Restlet representations, indirectly closing the underlying Tomcat buffer which could have been reused for another request, causing unexpected socket reading issues. Initially reported by Denys Hryvastov. - Fixed issues preventing SpringFinder and SpringBeanFinder from working correctly with ServerResource subclasses. Reported by Evgeny Shepelyuk with contributions to the solution by Rhett Sutphin. - Fixed bug in CopyOnWriteArrayList emulation class causing the Client helper to not being created in compiled mode. Reported by Guido Schmidt. - Added NPE check in ServerResource in getAvailableVariants(). Reported by Bob Resendes. - Added NPE check in MapVerifier.getSecret(). Reported by Carsten Lohmann. - Added test to prevent class cast exception in Variant#equals. Reported by Patrick Logan. - Fixed GAE compilation issue in ByteUtils.getStream() method. Contribution by Marcelo Ochoa. - Fixed issue with redirections in first resource example. Reported by Philippe Mougin. - Fixed issues with response.getEntity().getText() in the GWT edition. Reported by Guido Schmidt. - Enhancements - Added support of the "xml:base" attibute when parsing Atom Publishing documents. - Updated Grizzly to version 1.9.18b. - Updated FileUpload to version 1.2.1. - Updated JavaMail to version 1.4.2. - Updated JAXB RI to version 2.1.12. - Updated JSON library to version from 2009/08/16. - Updated Lucene to version 2.4.1. - Updated Tika to version 0.4. - Updated OAuth library to version from 2009/06/17. - Updated Velocity to version 1.6.2. - Updated JiBX to version 1.2.1. - Updated db4o to version 7.10.96. - Updated Jetty to version 7.0 RC6. Upgraded the Jetty extension: replaced "headerBufferSize" parameter by "requestHeaderSize" and "responseHeaderSize" parameters. Removed "lowThreads" parameter no longer available. - Updated the Javadocs of the API to indicate the mapping between properties/classes and HTTP headers. - Updated the "Server" HTTP header returned by default to "Restlet-Framework/xxx" - The thread pool of Jetty servers can now be configured with Spring. Reported by Evgeny Shepelyuk. - Added support for the "xsl" extension in MetadataService. Fixed potential NPE. Contributed by Fabian Mandelbaum. - Added JAXB converter helper. Contributed by Sanjay Acharya. - The ConverterService now passes a preferred variant to the selected converter helper when no one is provided by the client. Reported by John Logsdon. - Added extension "dataservices" which is a client extension of the ADO.NET Data Services technology provided by Microsoft. - 2.0 Milestone 4 (2009-08-06) - Bugs fixed - Improved support for the RFC 3339 date format which was limited due to SimpleDateFormat. Added InternetDateFormat. Based on a contribution from Frank Hellwig. - Fixed bug in date format generated by Atom feeds. - The internal HTTP server now shuts down gracefully. - Added a "gracefulShutdown" parameter on the Jetty connector. Suggested by Arjohn Kampman. - Registration of HTTP and JavaMail clients was missing in the GAE edition. Reported by MyloC. - XStreamRepresentation didn't register JettisonMappedXmlDriver correctly. Necessary for proper deserialization. Reported by Gabriel Ciuloaica. - Fixed and completed SecretDigestVerifier class. Reported by Thomas Cozien. - Returned error status when a client sends a request although no client connector supporting this request's protocol is registered. Reported by Avi Flax. - Fixed bug in Template class when the pattern is updated. - Fixed regression with Directory causing a 405 status to be returned for conditional GETs. Reported by Serge Ilyn. - Fixed issue with parsing of AWS authentication HTTP headers. Reported by Stuart MacKay. - Fixed infinite loop when instantiating a Form with a query in the GWT extension. Reported by Olivier Monaco. - Fixed issue with annotated method returning a representation and whose metadata where ignored (always returning the "octet/stream" media type for example). Reported by Fabian Mandelbaum, David Fogel. - Added implementation of the "exhaust" method in DigesterRepresentation class. - Added default DomRepresentation constructor. - Form now accepts extra "&" characters in query strings. Reported by Andrew Moore. - Fixed encoding and decoding of LocalReference#normalizePath() and localizePath() methods. Contributed by Bruno Harbulot. - Fixed potential NPE in ServerResource and AnnotationUtils. Reported by Schley Andrew Kutz. - Fixed OSGi imports for org.restlet.ext.xml. Reported by Nicolas Janicaud. - Fixed potential NPE in ComponentHelper#checkVirtualHost. Reported by Matt J. Watson. - Fixed bug in XstreamRepresentation failing to use the DOM XML driver. Reported by Florian Georg. - Fixed bug in converter helper selection algorithms. Reported by John Logsdon. - Fixed bug causing subsequent requests to annotated ServerResource subclasses to be forbidden. Reported by John Logsdon. - Fixed issue with Macintosh character set. Java returns it as MACROMAN, while IANA only accepts MAC or MACINTOSH. Added translation logic to CharacterSet class. Reported by Bruce Cooper. - Fixed bug in ClientResource#options() method not issuing an OPTIONS HTTP request. Reported by Bob Resendes. - Fixed issues in Xstream converter with primitive types. - HTTP response where returning duplicate media type parameters. Reported by Evgeny Shepelyuk. - Added Status#isRecoverableError() method. - Added "retryOnError", "retryDelay" and "retryAttempts" properties on ClientResource to try to recover from some communication errors. - ServerResource now rejects unknown entities with a 415 status. Suggested by Sylvain Pajaud. - Fixed bug with annotated methods returning a representation. Metadata were always overridden. Reported by Joe Nellis. - The "Location" header must contain an absolute URI. Reported by Simon Reinhardt. - Enhancements - Upgraded Jetty library to version 6.1.18. - SpringServerServlet nows gets its component fully configured, with a default WAR client and parameters copied. Reported by Dustin N. Jenkins. - Added Variable.URI_QUERY_PARAM type to match query parameter names or values. Suggested by John Wismar. - ServerServlet nows copies the ServletContext into a special "org.restlet.ext.servlet.ServletContext" attribute of both the Component's context and the Application's context. - Added logging capabilities to the Router classes via a new protected log(Route) method. - Directory listings now correctly display a trailing slash for directories. Suggested by Aron Roberts. - Load only once the accept.properties file used by the TunnelFilter instance. - Load only once the agent.properties file used to populate ClientInfo instances. - SpringFinder and SpringBeanFinder now support the creation of resources based on ServerResource. - SpringRouter and SpringBeanRouter now support the creation of resources based on ServerResource. - Refactored content negotiation to take into account all dimensions (language, media type, character set and encoding). - Improved metadata handling for local entities (files, zip, clap, etc.). - Added Variant#includes() method. - Significantly improved converter service implementation. Now converter helpers support affinity scoring. - HTTPS connectors now reuses the keystore password as the key password if no specific one is defined. Supports keystore default behavior. - Added FTP client connector based on JDK's URLConnection in our existing "org.restlet.ext.net" extension. This connector supports login/password setting via ChallengeResponse and the new ChallengeScheme.FTP_PLAIN. This connector is only capable to handling GET methods. - Added RdfClientResource that can easily navigate the Web of data. Can follow linked resources and linked literals. - Added support of inline content for link tags. - Added getStatus(Throwable, UniformResource) method to StatusService. Suggested by John Logdson. - Added doCatch(Throwable) method to UniformResource. Suggested by Schley Andrew Kutz. - Added CharacterSet#WINDOWS_1252, MACINTOSH and many ISO_8859_* constants. - Added new extensions to MetadataService: - "ascii" for CharacterSet#US_ASCII) - "latin1" for CharacterSet#ISO_8858_1 - "mac" for CharacterSet#MACINTOSH - "utf8" for CharacterSet#UTF_8 - "utf16" for CharacterSet#UTF_16 - "win" for CharacterSet#WINDOWS_1252 - Added converter selection traces. Suggested by John Logdson. - Communication error from HTTP clients are now logged at the FINE level instead of WARNING. - The JAX-RS extension now works on Google App Engine. Fixes contributed by Martin Krasser. - Added doHandle(Restlet next, Request, Response) method on the Router class that can be overriden to do some processing that is common to any route selected. Suggested by John Logdson. - Fixed behaviour of ServerResource. When non existing a 404 status should be returned for safe method. Reported by Robert Hyerle. - The internal HTTP server now looks up system properties for SSL configuration as a fall-back. - The engine now catches all exceptions and even throwables (suggested by Marcelo Paternostro) that occur when trying to register helpers. - UniformResource#doCatch now logs at INFO level all exceptions and errors caught. - The JAX-RS extension now leverages the new ConverterService. For example you can now leverage the converter of the XStream extension for better serialization to JSON than the existing JSON provider based on the more limited JSON.org library. Reported by Juergen Zimmermann. - Added extension based on ROME library to support several versions of syndication feed formats RSS and Atom. Contributed by Tal Liron. - Fully automated the port of Restlet to each edition (GAE, GWT, Android, JSE and JEE). Using a custom Restlet Forge mechanism. Conditional compilation mechanism suggested by Philippe Mougin. - Breaking changes - The default language, defined in MetadataService is now based on the JVM's default locale, instead of English/US. - API changes - Added client and server RIAP connectors. Suggested by John Logsdon and Nirav Shah. - Added ClientInfo#getPreferredLanguage(), getPreferredMediaType(), etc. methods. Suggested by Jonathan Hall. - Uniform has been trimmed to a single handle(Request, Response) method and converted to an interface. The other methods have been moved to the Client class. The handle(Request) method has been moved to the Restlet class. - Context#clientDispatcher and serverDispatcher properties are now instances of Client instead of Uniform. - Removed the UniformGuard and ChallengeGuard classes. We now recommend to directly use Authenticator and Authorizer. - Added simpler TemplateRoute, Extractor and Validator filters as an alternative to the single Route class. - Deprecated Route in favor of parent and lighter TemplateRoute class. In Restlet 2.1, we will reintroduce Route as an abstract parent of TemplateRoute. - Renamed SecretDigestVerifier into DigestVerifier. - Restricted the role of Metadata class to metadata about representations for conneg. - Added protected authenticated() and unauthenticated() methods on Authenticator. - Added protected authorized() and unauthorized() methods on Authorizer. - Added Authorizer#AUTHENTICATED constant to authorize only authenticated requests. - Deprecated Request#setChallengeRequest(). Use getChallengeRequests() instead. - Added Metadata#getParent() method. - Added Metadata#isCompatible() method. - Added Metadata#includes() method. - Added better Variant#toString() implementation. - Added MetadataService#defaultCharacterSet property. - Added Conneg class in the engine to support content negotiation in a more maintenable way, and to support all dimensions (character sets, encodings, languages and media types). Suggested by Alexander Horn, Maxence Bernard and David Fogel. - Implemented Variant#equals() method and improved the implementation of isCompatible() method. - Moved static methods of LinkReference to Link. Removed the LinkReference class. - Added ClientResource#getParent() to return the parent resource based on the URI hierarchy. - Added org.restlet.util.Couple and Triple generic classes to store two or three related objects. Inspired by Tim Peierls's Relation interface idea. - Made Application#getService(Class<T>) public. Suggested by Remi Dewitte. - Marked Restlet class as abstract. - Moved "name", "description", "owner" and "author" properties from Application to Restlet. - Misc - Exceptions thrown in the internal HTTP client are not logged with a FINE level instead of a WARNING level. - Upgraded Simple to version 4.1.13 which now supports programmatic shutdown. Contributed by Niall Gallagher. - Updated GWT to version 1.7.0. - 2.0 Milestone 3 (2009-05-27) - Breaking changes - Deprecated ServletConverter and added an equivalent ServletAdapter class to prevent confusion with the ConverterService reintroduced in Restlet 1.2. - Moved all XML, DOM, SAX and XSLT related classes from the core Restlet API to a new "org.restlet.ext.xml" package. This was need to keep a uniform API with the new Android port. - Bugs fixed - Fixed bug with a ServerResource when an annotated method does not return a value. - Fixed dependency issue in the org.restlet.example.pom. Reported by Marcelo Ochoa. - ServerServlet ignores client connectors that are now available. - Fixed issue with annotation inheritance. Contributed by Tal Liron. - Fixed bug causing Engine to be instantiated several time. Reported by David Fogel. - Fixed potential issue in Engine classloading logic which used Class.class instead of Engine.class to get the class's classloader. Reported by David Fogel. - Fixed conversion issues with edge cases. - MediaType#isCompatible() now requires the other mediatype to be non null. - Fixed issues with conditional method in ServerResource. Reported by Tal Liron and David Fogel. - Fixed issues with ServerResource used in OSGi environments. Reported by David Fogel and fixed by Tim Peierls. - Fixed NPE with SpringFinder. Reported by Eric Hough. - Fixed potential NPE. Contribution from Remi Dewitte. - Fixed issue with the Authenticator class. Reported by Remi Dewitte. - SpringServerServlet now don't directly instantiate a ServletContextAdapter. Reported by Mikhail Spirydonau. - Fixed Maven build issue with resource files. Contributed by Remi Dewitte. - Fixed potential bug when a serverResource handle several representations with methods that return String objects. - Fixed potential bug with WriterRepresentation when character set is not defined. - Fixed bug in Finder with ServerResource causing some NPE in some cases. Reported by Michael Berman. - Fixed some Maven artifact IDs (Atom, XML and FileUpload extensions). Reported by Jean-Yves Cronier and Remi Dewitte. - Fixed potential NPE in XmlRepresentation with namespaces. - Fixed Atom extension for better AtomPub 1.0 compliance. Reported by Thom Nelson. - Fixed MediaType for proper parsing of parameters. Reported by David Bordoley. - Enhancements - Servlet's UserPrincipal is now transferred into Restlet's ClientInfo#subject property. Suggested by Paul Davis. - Updated Media type RDF N3 from "text/rdf+n3" to "text/n3". Suggested by Simon Reinhardt. - Added support of the parsing and writing of RDF documents expressed in N-Triples notation. - Added support of the parsing and writing of RDF documents expressed in Turtle notation. - Added an initial port of Restlet to the new Google App Engine. Suggested by Didier Girard. - Added a ContextTemplateLoader to FreeMarker extension to load template based on the client dispatcher and a base URI. - Added new extension based on XStream library to automatically convert Java objects to/from XML and JSON. - Added converter helper to the "org.restlet.ext.json" extension. Useful for the ConverterService. - Added ObjectRepresentation classes to both the Restlet/GWT edition and to the server-side GWT extension. This class can (de-)serialize POJOs using the JSON-based encoding used by GWT-RPC. - Added content-length header (with 0 value), in case the entity is not available when posting or putting since MS Azure requires this header for any request. Reported by Ronny Kwon. - Improved implementation of converter plugins (default/internal, Atom extension and GWT server-side extension). - Added MediaType#APPLICATION_JAVA_OBJECT_XML constant. - Added support for automatic conversion between serializable JavaBeans and Representations using either binary Java Object Serialization or JavaBeans XML encoding. - Added conversion support for forms. - Interfaces implemented by server resource classes are now introspected for annotations. - Added ClientResource#create(...) and wrap() methods to create dynamic proxies implementing a given interface. - Added Series#getValuesArray() with a flag to ignore case. Suggested by Arjohn Kampman. - Added a port of Restlet core to Android 1.5 (mobile OS) and to Google AppEngine 1.2. - The Net HTTP client connector now supports SSLContextFactories Contributed by Bruno Harbulot. - Added check for JAXP parsers not supporting XInclude feature. Reported by Mikis. - Optimized MetadataService#addCommonExtensions() to prevent multiple array copies. Reported by David Fogel. - XmlRepresentation#getNamespaces() is now protected. Suggested by Remi Dewitte. - Refactored the class loading code in the engine. Suggested by David Fogel. - Tag#weak internal field is now final. Suggested by Arjohn Kampman - Added provider for JAX-RS based on the new ConverterService. This allow pluggable support for converters such as JSON or XStream. - API changes - RepresentationInfo is now concrete and has more constructors. Suggested by Lars Heuer. - UniformResource#init() now throws ResourceException and catches it to update the response. Suggested by Lars Heuer. - Renamed UniformResource#init() into doInit(). - Renamed UniformResource#destroy() into release(). - Added an UniformResource#doRelease() method. - ClientResource now overrides finalize() to call the release() method. - Connector#isAvailable() method added to test the presence of the underlying connector helper. - Removed Context#setRealm() to prevent potential threading issues. Reported by Tim Peierls. - Added new constructors to Representation based on the parent RepresentationInfo class. Suggested by Remi Dewitte. - Added FileRepresentation#autoDelete property. Contributed by Remi Dewitte. - Added intercepter methods to ServerServlet needed for the XDB extension. Contributed by Marcelo Ochoa. - Added a "form" extension mapping in MetadataService for the media type "application/www-form-urlencoded". Suggested by Tal Liron. - The class EmptyRepresentation is now public and the static method Representation#createEmpty() has been deprecated. - Moved several implementation classes of the Servlet extension into an "org.restlet.ext.servlet.internal" package to hide them from the public Javadocs as they should rarely be used directly by end users. - Renamed ServerResource#exists property to "existing". Suggested by Lars Heuer. - Filter#setNext() now accepts ServerResource subclasses. Suggested by Lars Heuer. - Added Method#safe and idempotent properties. - Added ClientResource#followRedirects property and the related implementation code. - Deprecated the abstract DigestRepresentation class, replaced by Digester. Added a getDigester method on the Representation class. - Deprecated Representation#checkDigest and Representation#computeDigest methods. - XML component configuration now supports new ServerResource subclasses. - Deprecated the Resource and Guard classes. - Added toObject() and toRepresentation() methods on ClientResource. - Refactored the services API. Added a "services" property on Application to allow users to register new ones. Also, add a createInboundFilter() and createOutboundFilter() methods to automatically register them when starting the application. - Added MetadataService#getAllMediaTypes(), getLanguage() and getMediaType() and similar methods. Reported by David Fogel and suggested by Remi Dewitte and Tim Peierls. - Added AppendableRepresentation for dynamic generation of StringRepresentation instances. - Miscellaneous - Component XML configuration has been moved into an Engine ComponentXmlParser class. - Added unit test case for the Alphanum algorithm. Contributed by Davide Angelocola. - ServerResource now rethrows exceptions from annotated methods. Reported by Tal Liron. - Removed the Script extension and Scripturian libraries that will now be managed outside the Restlet project by Tal Liron. - Updated GWT library to version 1.6.4. - Updated OAuth library to latest version. Suggested by Sean Sullivan. - 1.2 Milestone 2 (2009-04-01) - Breaking changes - Finder#createTarget() methods are now all protected. The findTarget() method is now public. Suggested by Leigh Klotz. - All core representation classes have been moved from the "org.restlet.resource" package into a new "org.restlet.representation" package. Make sure to adjust your import instructions. - The ConnectorService#afterSend() and beforeSend() are now always called, even if no entity is written. They are now related to the sending of the message itself. Suggested by Paul Davis. - The Router.createFinder() method is now public. - The Callback abstract class in the GWT module is now an interface. This should have no impact in most cases. Just remove any associated @Override annotations. Suggested by Scooter Willis. - Bugs fixed - Fixed typo in the declaration of the o.r.e.Engine#DESCRIPTOR_AUTHENTICATOR. Reported by Remi Dewitte. - Removed all string instantiations of secrets. Contributed by Remi Dewitte. - Fixed various OSGi issues. Reported by David Fogel. - Fixed missing entries in ChallengeScheme#valueOf. Reported by Sean Sullivan. - Fixed JAXB pom issue. Reported by Fabio Mancinelli. - Added workaround to make sure that the JAX-RS extension is registered as an implementation of the JAX-RS API. Suggested by David Fogel. - Fixed encoding issue with percent characters at the end of URI references with the required two digits following. Now the percentage sign is encoded and a fine trace is logged. Reported by Nels Nelson. - Enhancements - Added a getItemIterator() on RestletFileUpload to facilitate access to parts in streaming mode. Suggested by Paul Austin. - The default SAX handler has been implemented to log validation information. Contributed by Raif S. Naffah. - DirectoryResource class in engine now has a protected getDirectoryContent() method. Suggested by Gordon Mohr. - Implemented Text#toString() in the Atom extension. - Completed list of registered media types. Suggested by Remi Dewitte. - JAX-RS extension now leverages the new security API. Contributed by Bruno Dumon. - Added setters for helpers in Engine. Suggested by Kevin Conaway. - Added the ability to tunnel methods via a specific header. Contributed by Fabrice Boileau. - Added conversion methods to engine's ByteUtils between byte arrays and character arrays. Contributed by Remi Dewitte. - Added protected DirectoryResource#getRepresentation() and getClientDispatcher() method to facilitate extension and support of special cases. Original issue reported by Dave Fogel. - Added a client connector supporting ZIP and JAR URIs that are based on local archive files. Contributed by Remi Dewitte. - Enhanced JsonRepresentation based on Tal Liron's contributions. Now supports indentation configuration and more manipulation and conversion methods. - Added RDF extension that aims to support the parsing and writing of RDF representations. - Added support of parsing and writing of RDF/XML and RDF/N3 representations. - API changes - Added Role class and "roles" property to Application. - Fully refactored the security package introduce in 1.2 M1 based on community feed-back. - Added Realm, MemoryRealm classes and "realms" property to Component. - Added "verifier" and "enroler" properties to Context. - Reverted represent*() auto-matching support for further discussions. Suggested by Tim Peierls. - Added constructors with feed URI in the Feed class of the Atom extension. - Added "indent" property to DomRepresentation. Suggested by Cliff Binstock. - Added support of Shared Key and Shared Key Lite authentication schemes developed by Microsoft. Suggested by Steve Sfartz. - WadlApplication now invokes the findTarget() method on Finder instances instead of the createTarget() one. Suggested by Leigh Klotz. - Added Delete, Get, Options, Post and Put annotations to the org.restlet.resource package. Based on community feed-back and suggestions by Tim Peierls. - Added org.restlet.resource.UniformResource and ClientResource classes as part of our new Resource API. - Added createClientInfo() method on Variant. - Added a Message#getEntityAsText() method caching the text content to allow several reads along a chain of filters. - Added a Server#setTarget() method taking a Resource class as a parameter. This is useful for minimalistic examples. - TunnelService now accepts query parameter values such as "application/xml" and now just registered extension names such as "xml". Suggested by Paul Austin. - Renamed LinkSet to Graph and added support for N3 formulae. Graph can be source or target in Link instances. - Removed Link.identifier and Graph.identifier properties. - Series#getFirstValue() now returns the default value if the parameter exists but has a null value. Suggested by Jonathan Hall. - Added Context#setClientDispatcher() and Context#setServerDispatcher() methods. - Added support for proxy authentication in the Restlet API. Added "proxyChallengeResponse" property to Request, added "proxyChallengeRequests" to Response. Added support in the HTTP parsing and formatting layers. - Added a WadlApplication#createFinder() method to facilitate customization of behavior with Spring. Suggested by Rhett Sutphin. - Added Protocol#ZIP constant. - Representation#finalize() method now has a default implementation that calls the release() method. Suggested by Remi Dewitte. - Updated accept.properties file, removing Firefox customization as version 3.0 has proper 'Accept' header. - Added a JaxbRepresentation#setValidationEventHandler method. - Added Variant#isCompatible() method. - Added an org.restlet.representation.RepresentationInfo class that contains the "lastModified" and "tags" properties from Representation which is now a subclass. Variant is the super class. Useful to check conditions without pulling a full representation. Suggested by Lars Heuer. - Added Method.ALL constant. Useful to declare variants common to all methods in the new ServerResource class. - Added new org.restlet.routing package and moved Filter, Router, Redirector and subclasses to it. - Moved Directory, Finder and Handler to org.restlet.resource package. - Renamed org.restlet.security.Guard to UniformGuard in order to move org.restlet.Guard to this security package. - Misc - Upgraded Simple server to version 4.1.9. Contributed by Niall Gallagher. - Fixed Javadocs typos in Router and Resource. Contributed by Raif S. Naffah. - Fixed issue with parent contexts in ServerServlets. Contributed by Marcelo Ochoa. - Updated OAuth library to latest version. Suggested by Sean Sullivan. - Added HttpRequest#getHeaders() and HttpResponse#getHeaders() methods. Added HttpRequest#addHeader() and HttpResponse#addHeader() static methods. Suggested by Kevin Conaway. - Updated licensing information to mention addition of the EPL 1.0 licensing option (Eclipse Public License 1.0). - Added Maven support to build Restlet modules. Suggested by many. Contributions by Jean-Yves Cronier. - 1.2 Milestone 1 (2009-01-23) - Breaking changes - The engine has been moved from "com.noelios.restlet" to the "org.restlet.engine" package, simplifying the packaging. - All engine extensions have been moved to "org.restlet.ext" packages. - The com.noelios.restlet.ext.spring extension has been merged with org.restlet.ext.spring. - Moved org.restlet.util.DateUtils, ByteUtils and Engine classes to org.restlet.engine.* packages. - Enhancements - Internal HTTP connector now supports HTTPS connections. Contributed by Kevin Conaway. - Added a Lucene extension including a Solr client connector contributed by Remi Dewitte. Also contains a useful TikaRepresentation to extract metadata from a representation using Lucene Tika parsing and analysis library. Suggested by Ben Johnson. - The Atom Service class now supports getting documents from other protocols than HTTP. - Updated org.restlet.Component to support validating parsing. Contributed by Raif S. Naffah. - XmlRepresentation now has "entityResolver", "errorHandler", "schema", "xIncludeAware" and "validating" properties. Contributed by Raif S. Naffah. - API changes - A response with a 200 (Ok) status should have an entity. Now, we make sure that a warning is logged. Reported by Rob Heittman. - Removed all code deprecated in the Restlet 1.1 release. - Added org.restlet.data.Literal to represent RDF literals with an optional datatype. - Added org.restlet.data.Link to represent RDF links (aka triples, statements or relationships). - Moved o.r.u.Helper class, used privately by API classes to the o.r.engine package. - Added MediaType constants APPLICATION_RDF_TRIG, APPLICATION_RDF_TRIX, APPLICATION_RDF_TURTLE, APPLICATION_SPARQL_RESULTS_XML and APPLICATION_SPARQL_RESULTS_JSON for RDF and SPARQL. - Added LinkReference and LinkSet classes to support RDF reference manipulation (blank nodes for example) and RDF graphs or models. - Added CharacterSet#DEFAULT constant, new constructor for Charset instances and a toCharset() method. Suggested by Charles Gay. - Added Reference#toUri(), toUrl() and constructors from java.net.URI and URL instances. Suggested by Cliff Binstock. - Added APPLICATION_ATOM media type constant and deprecated APPLICATION_ATOM_XML. - Added APPLICATION_ATOM_SERVICE_XML media type constant and deprecated APPLICATION_ATOMPUB_SERVICE. - Added APPLICATION_ATOMPUB_CATEGORY media type constant. - Added APPLICATION_KML and APPLICATION_KMZ media type constants. Suggested by Frank Hellwig. - Added APPLICATION_MATHML_XML media type constant and deprecated APPLICATION_MATHML. - Added APPLICATION_RSS_XML media type constant and deprecated APPLICATION_RSS. - Added APPLICATION_W3C_SCHEMA_XML media type constant and deprecated APPLICATION_W3C_SCHEMA. - Added APPLICATION_WADL_XML media type constant and deprecated APPLICATION_WADL. - Added APPLICATION_XHTML_XML media type constant and deprecated APPLICATION_XHTML. - MediaType constructor now normalizes the main and sub parts. If invalid characters are detected, an IllegalArgumentExcept is thrown. Spaces are also trimmed and empty parts are converted to '*'. Contributed by Nicolas Rinaudo. - Method#setUri() has been deprecated as Method instances shouldn't be modifiable. - Language.getSubTags() now returns an unmodifiable list. - MediaType.parameters property is now unmodifiable. Initial issue reported by Nicolas Rinaudo. - Added static Series#unmodifiableSeries() method. - Added DateUtils.format(Date) method which uses HTTP default format. - Added a new "org.restlet.security" package with a full replacement for current Guard mechanism. This is an alpha level package not intended for Restlet users yet. - Made the SpringBeanRouter implement ApplicationContextAware to enable AOP on target resources. Suggested by Daniel Woo. - Resource subclasses can now declared variants and match them more easily using an automatic detection mechanism based on represent*() methods where '*' is a series of extensions. Also added a "detectVariants" property to turn off this behavior if necessary. - Added a getAllMetadata(String extension) method on the MetadataService class. - Deprecated the ClientInfo#addresses property and replaced it by a more explicit "forwardedAddresses" property. Also, added a new getUpstreamAddress() method. Adjusted the Resolver class to add a new "ciua" variable. Change suggested by John D. Mitchell. Initial patch provided by Remi Dewitte. - Added ClientInfo#subject property returning a JAAS Subject. Can contain several principals and credentials. Deprecated the ChallengeResponse#getPrincipal() method. - Added new Conditions.getStatus() method signature for usage by the JAX-RS extension. Suggested by Stephan Koops. - Misc - JAX-RS extension: - added class ExendedUriBuilder with "file" extensions for content negotiation and an ExtendedUriInfo to get it. - Supports per-request-providers now. - JaxRsApplication will not clear the MetadataService (as before; was required to not use other extensions as given in the JAX-RS ApplicationConfig class). - The Directory class doesn't override the findTarget() method but uses the default Finder mechanism based on the "targetClass" property. Therefore, it is easier to specify a subclass of org.restlet.engine.local.DirectoryResource in order to customize the default behavior. Suggested by Cliff Binstock. - Upgraded db4o to version 7.7.67. - Refactored engine support for the StatusService. Removed ApplicationStatusFilter and ComponentStatusFilter. - Extracted all internal classes of ByteUtils into the new org.restlet.engine.io package for easier reuse and maintenance. - Clarified Javadocs in Reference#getPath() methods. - Fixed potential NPE in Reference#decode() method. - Clarified Javadocs in FileRepresentation and methods Representation#getDownloadName(), setDownloadName() in order to explain that setDownloadable(true) must be called first. Issue reported by Kevin Conaway. - The internal HTTP client doesn't send absolute request URIs anymore. It now sends them as relative URIs according to the HTTP 1.1 specification. Reported by Jonas Maturana Larsen. - Upgraded Apache Commons IO to version 1.4. - The ServerServlet now sets the HTTP headers after the status to prevent issues with Tomcat 5.0 and "Content-Length: 0" headers sending the response immediately. Reported by Eirik Bjorsnos. - The internal HTTP client no longer forces the user agent name if one has already been specified by the user. Contributed by Kevin Conaway.