Hi all, The next release has been delayed several times already, sorry for that. This time I'm confident to release this week, probably on Friday, unless unexpected bugs occur over the week. As it contains numerous changes, any effort to test the latest snapshot is very welcome.
Beware that significant changes were done to the API. Check the changes log, the updated examples and the Javadocs in the distribution. The code is stable and all known bugs are fixed. Support for the Servlet adapter has been upgraded to work with Applications. I've copied below the full changes log. The snapshot is available at: http://www.restlet.org/downloads/current.zip Best regards, Jerome Louvel --- 1.0 beta 19 (2006-10-17) [Bugs fixed] - Fixed issue with error status preventing the setting of response headers with Servlet containers like Tomcat. Report and solution by Evan DiBiase. - Completed support for content streaming in the HTTP client connector extension. Issue reported by Mikkel Jensen. - Fixed bug in ParameterList.getFirstValue(String, boolean) ignoring the "ignoreCase" parameter. - Fixed issue with ServerServlet preventing the returning of an output representation with an error status code. Reported by Sean Landis. - Fixed incomplete plugin descriptors for some extensions. - Added workaround for JDK's bug #6472250 when using the fixed length mode with the HTTP client. [API breaking changes] - Renamed Representation.isContentAvailable() to isAvailable() and isContentTransient() to isTransient(). - Merged Client and GenericClient into a single Client class. - Moved com.noelios.restlet.connector into hidden com.noelios.restlet.impl.connector package. - Moved internal utilities from com.noelios.restlet.util into hidden com.noelios.restlet.impl.util package. - Moved com.noelios.restlet.spi into hidden com.noelios.restlet.impl package. - Moved org.restlet.component.ContainerContext to com.noelios.restlet.impl.component.ContainerContext. - Renamed Server."next" property into "target". "Next" was assuming that a previous Restlet existed, which is false for Server connectors. - Moved com.noelios.restlet.util.WrapperMap into org.restlet.util. - Removed Restlet.compareTo() method. No apparent usage. - Renamed Reference.getProtocol() into getSchemeProtocol(). - Scorer now derives from Filter to improve factorization. - Renamed Handler into Finder. Note: Handler is still used, but for a new purpose! - Renamed DirectoryHandler* classes into DirectoryFinder*. - Added Context.getClient() returning a generic ClientInterface. - Removed get/post/put/delete methods on Context as getClient() is preferred. - Added a post() method on Resource returning an instance of the new org.restlet.data.Result class as well as put() and delete(). - Renamed Chainer.findNext(Call) into getNext(Call). Chainer is now abstract. - Scorer is now abstract to force implementation of the score() method. - Renamed "name" property into "agent" for ClientData and ServerData. - Added "name" (for domain name) and "port" properties to ServerData, matching HTTP's "Host" header. - Refactored HttpCall and related classes to better handle and preserve the "Host" header information. - Renamed CallModel variable "clientName" into "client.agent" and "serverName" into "server.agent", also "serverAddress" into "server.address" and "clientAddress" into "client.address". - Removed Context.getClient(protocol) method, now Context directly implements ClientInterface. - Replaced com.noelios.restlet.HostRouter by a portable org.restlet.component.VirtualHost class. See updated tutorial to know how to migrate. - Moved com.noelios.restlet.PatternScorer to com.noelios.restlet.impl.PatternScorer as this is related to the API implementation. - Refactored and completed the Application class to act as a portable component, deployable on any Restlet engine and any (virtual) host without any change. - Moved "root" property from Component to Application. - Added new org.restlet.component.VirtualHost class, as a Router subclass to target applications or handlers. - Split org.restlet.Call into org.restlet.Request and org.restlet.Response to solve overweight issue. Suggested by Piyush Purang. Also added a parent Message class following the HTTP semantics. Merged "input" and "output" properties into a single "entity" property on Message. - Merged AbstractResource and Resource into a single Resource class. - Merged AbstractRepresentation and Representation into a single Representation class. - Removed the "com.noelios.restlet.builder" package as the new Application feature broke this approach and makes it less useful. We may reintroduce a refactored version in a later release. - Moved LogFilter and StatusFilter to com.noelios.restlet.impl. - Moved ClientList and ServerList to org.restlet.util - Moved ScorerList to org.restlet.util and changed it to an interface. - Renamed ClientData and ServerData to ClientInfo and ServerInfo to be less ambiguous about the type of data. Also renamed "Response.server" property to "serverInfo" and "Response.client" property to "clientInfo". - Moved EmptyValue to org.restlet.util. - Renamed ConditionData to Conditions. - ServerServlet now only works with applications as target. Review updated Javadocs before upgrading. - GuardFilter now logs messages via the context's logger. Changed constructor. - Moved all remaining classes of org.restlet.component and org.restlet.connector into org.restlet for simplification purpose. Suggested by Piyush Purang. - Added Holder filter to hold an attached handler and apply call logging and status setting. - Refactored hierarchy : Restlet, Chainer, Connector and Component directly derive from base Handler class. - Extended usage of contexts. - Removed WrapperRestlet class, replaced by a wrapping constructor on Restlet. - Renamed "input" and "output" to "entity" or "request" or "response" in all properties name for CompressFilter, DecompressFilter, ExtractFilter, HttpClientCall, HttpServerCall, Result - Moved ClientInterface to org.restlet.util. - Replaced WrapperCall by wrapper constructors on Message, Request and Response. - Replaced WrapperRepresentation by wrapper constructors on Resource and Representation. [Other changes] - Updated Jetty 6 extension to 6.0.1 release and Jetty 5 extension to 5.1.11 release. - Added Resource.setVariants() and setIdentifiers() methods. Can be easier than doing a getVariants().clear() then a getVariants().addAll(newList). Suggested by Chris Winters. - org.restlet.ReferenceList now derives from WrapperList<Reference> to factorize code and to clarify (in Javadocs) which extra methods are provided. - Improved Javadocs for the org.restlet.Handler class to explain what is the default behavior of each handle*() method. - Refactored all HTTP client and server classes to work with the new call converter mechanism. - Renamed AbstractHttpServer to HttpServer, AbstractHttpServerCall to HttpServerCall and AbstractHttpClientCall to HttpClientCall. - Merged HttpCall interface and DefaultHttpCall class into single HttpCall class. - Added com.noelios.restlet.connector.HttpServerConverter as the base call converter (from HTTP calls to uniform REST calls). - Refactored the HttpUrlConnection-based HTTP client to extract a generic HttpClientConverter and added a base HttpClient class. - Added support of HTTP headers in high-level calls. The headers are available in Request|Response.getAttributes().get("org.restlet.http. headers") as an instance of ParameterList. Additional headers can also be added by setting a "org.restlet.http.headers" attribute in Request or Response. Note that only non-standard HTTP headers are allowed to be added to prevent conflicts with the connector's behavior. - Added sample application illustrating the access raw HTTP headers. Used suggestion from John D. Mitchell. - Added static valueOf() methods to ChallengeScheme, CharacterSet, Encoding, Language, MediaType, Method, Protocol and Status. Sometimes renamed existing create() method. Suggested by Piyush Purang. - Clarified the Javadocs of root classes in org.restlet. - Added more constructors to Chainer, Context, Filter and Finder. - Added a Message.setEntity(String, MediaType) method facilitating the setting of string-based entities. - Fully updated the FAQ. - Updated pictures in the tutorial to reflect the latest API changes (Application, hierarchy changes, etc.). - Form handling code don't throw IO exceptions anymore for Call.getInputAsForm() and Reference.getQueryAsForm(). Issue reported by Piyush Purang. - Added modification support (PUT and DELETE) to DirectoryFinder. Suggested by Don Dwoske and John D. Mitchell. Implementation contributed by Thierry Boileau. - Added "protocol" property on Call. - Added FTP constant to Protocol. - Improved detection of default ports in Reference.toString() static methods. Added new toString() variant. - HTTP client connectors now set the "Host" header manually when proper information is found via Call.getServer()."name" and "port". - Refactored the parsing/construction of the target resource reference to handle both relative and absolute URIs. - Improved robustness of Reference when handling relative URIs. - Added a "javadoc-hide" property to "build.properties" to hide the Javadocs of implementation packages (true by default). - Added shortcut attach/detach methods to Router, equivalent to getScorers().add()/removeAll(). - Method Filter.getNext(Call) is now final to prevent overriding. If needed, use Chainer as base class. - Added ScorerList.removeAll(UniformInterface) method to remove all scorers pointing to a given handler. - Added Protocol.ALL constant as a protocol wildcard. - Added "hosts" and "localHost" properties to Container. - Added support "Allow" HTTP headers. New allow*() methods added on Resource and support for setting the 405 status in the Finder (ex-Handler) class. The list of allowed methods is then set to the Response (ex-Call) object. Subclasses of Finder can customize the list of allowed methods. Suggested by AJ Barnes and Lars Heuer. - Updated tutorial examples to leverage application concept. - Refactored all usages of the JDK's loggers in order to reuse the Context's logger, allowing separation of messages for each application.