===========
Changes log
===========
- 2.1.7 (02/09/2014)
- API changes
- XEE injection security fix (Issue #826). As a side effect, the XML parsers adopt a more
defensive strategy and prevent by default loading of external entities, validation of DTD,
and turn on secure processing for SAX parsers.
- Bug fixed
- Fixed issue #810, generation of HTML representation of a WADL document.
- Fixed issue #720, complete the content-type header with the right boundary
parameter value when using multipart representations.
Reported by xwen97.
- Fixed issue #821: status reason phrase set by the Jetty connector.
- Fixed issue #823: Service-Component header missing in manifest.mf for servlet extension.
Reported by Ioan Lupu.
- XEE injection security fix. Issue #826. Reported by Alvaro Munoz.
- OData not passing null when property not marked nullable, issue #663.
Reported by Carl J. Mosca and contributed by Luke Adams.
- Android ICS: needs fixing for HttpUrlConnectionCall.getResponseHeaders, issue #548.
Reported by Bobby Sawhney.
- 2.1.6 (12/05/2013)
- Bug fixed
- Fixed issue #809 regression introduced when handling issues #774 and #778.
- 2.1.5 (12/05/2013)
- Bug fixed
- Fixed issue #791, EncoderService exposed size-fixed lists of ignored and accepted media types.
Reported by Tal Liron.
- Fixed issue #784, that leads to a maladjusted exception.
Reported by David Jorm.
- Fixed issue #649, if needed, add base64 padding characters to encoded md5 hash before decoding.
Reported and contributed by Andy Dennie.
- Enhancements
- Added support of nowrap "deflater" (support of GZIP compatible compression), issue #786.
Reported and contributed by Tal Liron.
- Added ability to override Accept-encoding header values #654.
Proposed by Tal Liron.
- WritableSocketChannel whould write in loop to ensure all data been written, issue #783.
Contributed by Xiaoping Feng.
- 2.1.4 (09/07/2013)
- Bug fixed
- Fixed issues #774, #778 - Removed default support of JavaBeans XML-deserialization,
binary-deserialization on ObjectRepresentation class.
Reported by David Jorm.
- 2.1.3 (08/23/2013)
- Bug fixed
- Fixed issue #734 - Implementations of XmlHttpRequest in IE versions prior to IE10 turn
204 status into 1223. Reported by Koen Maes.
- Fixed issue #739 - copy extension headers from JAX-RS api to restlet response.
Reported by Mark Kharitonov.
- Fixed issue #727 generation of JSON extension for GWT edition.
- Fixed issue #757 - Infinite Loop in Feed.
- Fixed issue #753 - Date concurrency issue due to broken caching attempts.
Reported by @effad. Solved by Robert Fischer and Tim Peierls.
- Fixed issue #774 - Removed default support of JavaBeans XML-serialization.
Reported by David Jorm, Dinis Cruz, Abraham Kang and Alvaro Munoz.
- Fixed issue #778 - Removed default support of JavaBeans binary-serialization.
Reported by David Jorm.
- Misc
- Added log warning when an authentication scheme does not define a "realm" parameter.
Reported by Loïc Oudot (#759).
- 2.1.2 (02/28/2013)
- Bug fixed
- Log initialization issue in engine with GAE edition fixed.
Occurred in production.
- Internal HTTP connector didn't properly configure the
socket. Factorized client side logic.
- Fixed HTTPS issues in internal connector.
- Fixed discovering and setting of attributes from OData
representations.
- Fixed potential flushing issue with wrapped representations.
- Added support for parsing IPv6 when parsing host URI in internal HTTP server.
Contributed by Jun Hou. Reported by Reddy Lakshman and Neha Saini.
- Fixed JaxRsApplication(Application) constructor with a JaxRsRestlet adapter.
- Fixed NPE while issuing 405 responses in the JAX-RS extension.
Reported by Daniel Halperin
- The current response, application, context and virtual host are now properly
restored when the representation is called back to be written by the internal
HTTP connector.
- Fixed bug in Reference when no path existing but the query string has some
'/' characters in it. getPath() returns StringOutOfBounds exceptions.
Reported by Nicolas Rinaudo.
- Fixed bug when chaining Transformer or TransformRepresentation
objects. Reported by Brian Sletten.
- 2.1.1 (12/23/2012)
- Bug fixed
- Fixed arrays serialization in GWT edition.
Contributed by Jeff Plourde.
- Fixed internal HTTP connector to enable handling of asynchronous
client requests. Contributed by Florian Bucklers
- Fixed controllerSleepTimeMs default value in documentation for
internal HTTP connector.
- Fixed generation of requests in GWT edition, using the browser agent
name by default.
- Fixed implementation of method "getAttribute" by the ClientResource
and ServerResource classes (issue #695). Reported by Dennis Mitchell.
- Fixed conversion Java Double/EDM.Double types in OData extension.
Reported by Martin Grohmann.
- Took care of the IPV6 addresses. Reported by Laurent Rustuel.
- Add missing implementation in BufferingRepresentation for issue #681.
Contributed by Florian Bucklers.
- Added support of multiple levels of $expand in OData extension.
Contributed by Emmanuel Liossis.
- Fixed potential infinite loops while reading headers
(issues #599 and #656). Reported by Wei Wei Wang.
- Fixed reading of Via header (issue #599).
Reported by Nicolas Rinaudo.
- Strict conneg should evaluate media type parameters (issue #559, #652).
Reported and contributed by Andy Dennie.
- Fixed CookieAuthenticator which should redirect the user's browser to the
getLoginFormPath() when the credentials are missing or stale (issue #697).
Reported and contributed by Tim Peierls.
- Misc
- Prevent logging of verbose stack trace. Reported by Grzegorz Godlewski.
- 2.1.0 (09/20/2012)
- Misc
- Added support of GWT 2.5.
- 2.1 Release Candidate 6 (08/22/2012)
- Bug fixed
- Fixed sharing of ClientResource context with the underlying connector,
when this ClientResource is used outside a Component.
- Reduced the number of iterators created when internal NIO connector is
idle. Reported by Yan Zhou
- Fixed support for enabling and disabling cipher suites, restricting the
SSL protocol version and the requesting a client certificate, for all
connectors (internal and extensions).
Reported by Enoch Stephen, Jim Zuber and Andreas Schnabl.
- Reduced CPU consumption of internal NIO/HTTP connector by using proper
NIO selector wakeup logic instead of constant looping.
Reported by James Moger.
- Fixed regression regarding JAXB namespace parsing.
Reported by Jim Trainor, Jean Duteau and Lukas Niemeier.
- Fixed alphanum comparator bug.
Reported by Abdunnassar Usman, fixed by Rob Heittman.
- ServerResource.doConditionalHandle now returns 406 if no acceptable
variant and strict mode is true in ConnegService.
Contributed by Andrew Dennie.
- API changes
- Renamed Directory#setAlphaComparator and setAlphaNumComparator
methods into useAlphaComparator and useAlphaNumComparator with
proper deprecation. Suggested by Tim Peierls.
- Added getJsonArray, getJsonBoolean, getJsonNull and getJsonString
methods to JsonRepresentation in the GWT edition.
- Moved Couple and Triple classes to RDF extension. Added conveniency
add(...) methods to Graph class.
- Misc
- Reverted Role equality test to default Java object equality as
equality based on name could cause issues with MemoryRealm
mapping if several applications used the same role names.
- Upgraded Jetty to version 7.6.5.
- Upgraded Jackson to version 1.9.8.
- 2.1 Release Candidate 5 (05/23/2012)
- Bug fixed
- Fixed issue with OutputRepresentation retrieved as InputStream
using its getStream() method when writing negative integers.
Now properly shift values into the 0-255 ranges, leaving the -1
value as a clear marker for end of file.
Reported by Gabriel Pulido and Marc Knaup.
- Fixed user agent parsing for Chrome and Safari.
- Usage of ranges on representations having unknown size.
Reported by Bjorn Roche.
- Internal connector now closes entity stream/channel upon
completion. Suggested by Arjohn Kampman
- Fixed hanging bug in NIO connector occurring especially with
chunked encoding. Reported by John Logsdon.
- Fixed retrieval of SSL cipher suites and client certificates
for the internal HTTP client.
- Fixed security bug in the XML extension that allows XML external
entity attacks. Reported by Nicolas Gr�goire,
Caleb James DeLisle and Fabio Mancinelli.
- API changes
- Renamed ReadableListener into ReadingListener
- Renamed InputListener into ByteReadingListener
- Renamed ReaderListener into CharacterReadingListener
- Renamed StringListener into StringReadingListener
- Added missing SelectionRegistration parameter to
SelectionListener#onSelected() method.
- Added missing ClientResource#setProxyChallengeResponse(...),
ServerResource#setProxyChallengeRequests(...) and
Resource#getProxyChallenge...() methods. Reported ,tion.
- Added methods to MetadataService to retrieve the list of extension
names, per metadata subclass.
- Added constructor with just a name to Role.
- Replaced SecretVerifier#createUser(identifier) method with more
flexible createUser(identifier, request, response) one.
Suggested by Tim Peierls.
- Added CertificateAuthenticator to SSL extension that verifies the
presence of trusted client certificates.
Contributed by Bruno Harbulot.
- Misc
- Lowered trace level in Redirector from INFO to FINE.
- Cleaned up EncodeRepresentation and DecodeRepresentation classes.
- 2.1 Release Candidate 4 (04/06/2012)
- Bug fixed
- Basic fix for content negotiation regarding input entities.
- Removed useless reverse DNS lookup when creating a client socket
channel. Reported and contributed by Alessandro Pacifici.
- Fixed NPE when setting last segment on Reference.
Reported by Laszlo Hordos.
- Fixed OSGi manifest file for the jackson library that exposes a
private package. Reported by Laszlo Hordos.
- Enhanced support of ServerResource that inherits from generic classes.
- Fixed content negotiation regarding request entities
to ensure a better annotated method dispatching.
- Reference doesn't consider '{' and '}' as invalid characters anymore,
allowing resolution of URI templates on the client-side.
Reported by Andrei Pozolotin.
- Fixed OutputRepresentation with negative int that can't be serialized
on client side. Reported by Gabriel Pulido.
- Fixed parsing of Feed using the Rome extension.
Reported by Andy Dennie.
- Allowed multiple cookies set at once for JAX-RS.
Reported and contributed by Grzegorz Godlewski.
- Fixed formatting of expires cookie setting value.
Reported and contributed by Grzegorz Godlewski.
- Fixed CookieAuthenticator wrong login/logout intercept comparison.
Reported and contributed by Martin Svensson.
- Fix representations and converters that swallow exceptions whereas the
ConverterHelper#toObject throws IOException.
- Fixed namespaces declaration using SaxRepresentation.
Reported by Nicholas Waltham.
- Fixed scoring algorithm of the JaxbConverter, detected when used in
conjunction with JacksonConverter. Reported by Michael Henderson.
- API changes
- Moved Client#handle(Request) method to Restlet class.
- Added Resource#getQueryValue(String), getAttribute(String),
setQueryValue(String, String) and setAttribute(String, String)
shortcut methods.
- Moved Client#handle(...) methods to parent Restlet class.
- Context#clientDispatcher and serverDispatcher are now Restlet
instead of Client. Needed to fix URI template resolution
in simple ClientResource instances.
- Added ClientResource#accept(...) shortcut methods.
- Misc
- Updated FreeMarker library to version 2.3.19.
- 2.1 Release Candidate 3 (02/15/2012)
- Bug fixed
- Fixed Guice Maven group ID. Reported by Kristoffer Gronowski.
- Relaxed content type header parsing in case of a trailing
semicolon. Reported by Jean-Baptiste Dusseaut.
- 2.1 Release Candidate 2 (01/15/2012)
- Bug fixed
- Fixed the JAX-RS extension that did not introspect the
interfaces and parent classes of resource classes.
Reported and contributed by Shaun Elliott.
- On the client-side, a challenge response with a raw value
defined wasn't taken into account if a helper was missing.
Refactored engine's AuthenticatorHelper to move common
logic to the AuthenticatorUtils class.
Reported by Alex Milowski.
- Fixed POM dependency on Apache HTTP Client 4.1.1.
Reported by Dejan Lozanovic.
- Fixed potential NPE in StrictConneg.
- Fixed configuration of the default application's outbound,
when the application is not hosted by a Component.
Reported by Klaus-Peter Schlotter.
- API changes
- Added generic value type to NamedValue interface.
- Added ByteArrayRepresentation to org.restlet.representation
Suggested by Jerome Idylle.
- Added constructor from characters arrays in the
StringRepresentation class.
- Added constructors to ClientResource taking only a request
object (prototype) and no (last) response.
- Added EmfRepresentation#createEmfXmlResource(...) method
and write(EObject, OutputStream) method.
Suggested in part by Bryan Hunt.
- Misc
- Updated XStream to version 1.4.1
- Updated Jettison to version 1.3
- Lowered level of log messages when socket shutdown and close
is throwing exception. Suggested by John Logdson.
- 2.1 Release Candidate 1 (10/06/2011)
- Bug fixed
- Potential NPE in ServerServlet#init(Application).
Reported by Bryan Hunt.
- The Application(Context) constructor now behaves like the
setContext(Context) method. Reported by Bryan Hunt.
- Fixed internal HTTPS server which wasn't creating an HTTPS
request with all SSL related properties.
Reported by Henry Story.
- Fixed bug causing premature closing of connections managed
by the internal NIO/HTTP/SIP connector.
Reported by Cyril Lakech.
- The max IO idle time used in code was 60s instead of the
30s announced in the Javadocs. Now using 30s.
- Removed extra empty line in XML documents added by the
XmlWriter class.
- Fixed potential loops due to BrokenCyclicBarrier in internal
NIO connector.
- Fixed issue regarding the posting of Web forms to the GAE
platform (release 1.5.0 and higher) due to GAE misbehaviour
that consumes streams when receiving Web forms.
Reported by Bjorn Roche.
- API changes
- Added Authenticator#multiAuthenticating to better control
optional authenticators and ensure we don't attempt
several authentications if not necessary.
- Added ClientInfo#certificates and cipherSuite properties
and deprecated related attributes.
- Added shortcut ClientResource#addQueryParameter and
addSegment methods, based on the "reference" property.
- Added WadlApplication#canDescribe() method to facilitate
customization.
- Added lower-level RedableListener providing a ByteBuffer
when new content is asynchronously provided.
- Added TransformRepresentation#errorListener to be able to
replace the default one. Suggested by Warren Janssens.
- Attempting to create a Form instance from an EmptyRepres.
doesn't throw an exception anymore, just a fine log trace.
Reported by George Calm.
- Added APPLICATION_XQUERY media type constant.
Suggested by Alex Milowski.
- Refactored internal DigestUtils to clearly separate HMac
variants SHA-1 and SHA-256, in crypto extension.
- Refactored internal AwsUtils to clearly separate HMac
variants SHA-1 and SHA-256, in crypto extension.
- Added Graph.add*() methods and Link constructors as syntaxic
sugar in RDF extension.
- Added Reference.encode(...) methods with a "queryString"
boolean parameter to ensure that spaces are encoded as %20
instead of '+'. Reported by Matt Stromske.
- Added Reference.getQueryAsForm(boolean decode) method to
prevent decoding of form parameters in some cases.
- Added "lineWidth" and "usingEncodedAttributeStyle" properties
to EmfRepresentation to facilitate XMI writing configuration.
Reported by Sebastien Schneider.
- Added ChallengeResponse.secretAlgorithm property in case the
password is only known and usable in a hashed form (like it
can be the case for HTTP Digest). Added new constructors as
well as on ChallengeMessage.
- Increased the default request and response buffer size of the
internal connector to 16 and 32 kb in order, similar to Jetty.
- Increased default timeouts for internal connector. 5 mn for
idle thread and 1 mn for idle IO connection.
- Added Representation#isEmpty() and hasKnownSize() methods.
- New features
- Added ChallengeScheme.HTTP_AWS_QUERY constant and client-
side support for Amazon Web Services's SimpleDB special
authentication scheme (using URI query parameters).
- Added ISO 8601 date format in DateUtils class.
- Misc
- Updated SLF4j to version 1.6.2
- Updated Apache Commons Codec to version 1.5
- Updated Apache Commons Collection to version 3.2.1
- Updated Apache Commons FileUpload to version 1.2.2
- Updated Apache Commons IO to version 2.0.1
- Updated Apache Commons Lang to version 2.6
- Updated Apache Commons Pool to version 1.5.6
- Updated Apache HTTP Client to version 4.1.1
- Updated Apache HTTP Core to version 4.1
- Updated Apache HTTP MIME to version 4.1.1
- Updated Jackson to version 1.9.0
- Updated FreeMarker to version 2.3.18
- 2.1 Milestone 7 (08/24/2011)
- Bug fixed
- Fixed blocking regression in the GWT edition that avoids to
compile client proxies. Reported by Joscha Feth.
- 2.1 Milestone 6 (08/20/2011)
- Breaking change
- When retrieving or updating the raw headers in the Request or
Response attributes, the type should now be Series<Header>
instead of Series<Parameter>.
- The SecretVerifier.verify(identifier, secret) nows returns an
integer instead of a Boolean for more precise answers such as
for stale credentials (expired password).
- API changes
- Renamed UniformResource into Resource with proper deprecation.
- Added NamedValue interface to support common behavior in Series
instead of having to rely on the Parameter class as a base class.
- Updated the Series class to not need to use a subclass all the time
such as Form, CookieSeries and CookieSettingSeries. Now it is a
concrete class, taking a Class parameter at construction time such
as Parameter, Header, or any class implementing the NamedValue
interface.
- Deprecated Couple, Triple, CookieSeries, CookieSettingSeries.
Will be removed in version 2.2.
- Added Reference.addQueryParameter(Parameter) and
addQueryParameters(Iterable<Parameter>) methods.
- ClientResource now uses GET as its default HTTP method instead
of null.
- Added "timeIssued" property to ChallengeResponse, in order to
support cookie based authentication.
- Deprecated ClientInfo.getPreferredVariant() methods in favor of
the new ConnegService.
- Deprecated ClientResource.createRequest(Request) in favor of a
new createRequest() method.
- Added Request.isSynchronous() and isAsynchronous() methods as
convenient shortcuts.
- Added ClientResource.handleInbound(...) and handleOutbound(...)
method to factorize even more logic.
- Added Representation.append(Appendable) method.
- Deprecated Series.createSeries(...) method. Use constructor
instead.
- Added SecretVerifier.createUser(identifier) to allow creation
of User subclasses if necessary.
- Renamed JaxRsApplication.guard into authenticator to match the
parameter Authenticator class.
- Factorized "finderClass" property from Application and Router
into parent Restlet class and added a createFinder(Class)
method to facilitate instantiation and overriding.
Reported by Tim Peierls.
- Deprecated ServerList.setNext(Class) as it isn't used and its
logic isn't consistent with similar methods in Filter/Router.
Reported by Tim Peierls.
- Fix JaxRs extension when handling Web forms.
- Clarified exception thrown when the converter service is unable
to convert a representation to a given target class. Also, if
the conversion fails, a null object is returned and can be passed
to an annotated Java method for example.
- In case of exception in the user code invoked by an onResponse
callback or a GWT client proxy, the callback was invoked again with
an error status which proved to be non intuitive. Now, we simply
log a warning and stop the processing.
Reported by Cyril Lakech.
- Added Protocol.valueOf(name, version) method.
- New features
- Added a CookieAuthenticator class in the org.restlet.ext.crypto
extension to provide customizable and secure authentication via
cookies, in a way that is as compatible as possible with HTTP
challenge based authentication.
Based on an initial contribution by Remi Dewitte.
- Added org.restlet.service.ConnegService to provide a way to
control the content negotiation behavior at the application level.
It offers two modes: strict and flexible (default) by other algorithms
can be plugged by overriding this class and reusing the Conneg
subclasses in the engine package. Suggested by David Bordoley.
- Improved Restlet annotation value syntax to support alternate
variants using '|' and combination of several metadata for a
single variant using '+' separator. Also, all metadata are now
supported, not just media types.
- Added support for URI query constraints in the value of Restlet
method annotations such as @Get("form:json?light") or
@Get("?level=2"). This allows returning and serializing
different representation beans based on those parameters.
- Added HTML extension that currently supports write HTML form
in URL encoded or multipart form data. As a future replacement for
the org.restlet.data.Form class, it adds the ability to work with
multipart forms (currently writing only) with the same Java API.
Some suggestions from John Logdson.
- Added MediaType.APPLICATION_ECORE and APPLICATION_XMI constants,
and deprecated APPLICATION_XMI_XML. Registered "ecore" extension
into the MetadataService common extensions.
Issue reported by Thomas Eskenazi.
- Added EMF extension that supports the conversion between EMF
generated beans and XML or XMI representations. It can also
automatically write simple HTML representations for navigating
your web API. Hyperlinks can be specified using EMF eAnnotations.
Key feed-back from Bryan Hunt, John Logdson and Thomas Eskenazi.
- Added new HTTPS server connector based on the internal non-blocking
NIO connector. Co-developped with NetDev.
- Bug fixed
- Fixed potential NPE in the Authenticator when logging authentication
failure. Reported by Martin Svensson.
- Fixed potential NPE in ClientAdapter#commit(...) and generated
GWT proxies when no entity is returned. Reported by Cyril Lakech.
- Fixed potential NPE in BioUtils#copy() with one of the stream is null.
Reported by Cyril Lakech.
- Fixed character encoding bug with internal HTTP connectors with
2 bytes characters (accents, etc.). This might have caused troubles
in other parts of the framework as it was located inside the
BioUtils.getOutputStream(Writer) method. Reported by Laurent Rustruel.
- Misc
- Optimized the HeaderReader class beavhior in the engine.
- Optimized the processing of extra headers and challenge schemes.
Contributed by Scott S. McCoy
- Updated GWT server library to version 2.3.0.
- GWT client proxy generator now uses "Impl" instead of "Proxy" for
the automatically generated class, preventing confusion when the
annotated interface already ends with "Proxy".
Suggested by Cyril Lakech.
- Generation of GWT client proxy now stops when it detects usage of
annotations that don't come from the Restlet edition of GWT.
Suggested by Cyril Lakech.
- Clarified Redirector Javadocs to explain more clearly the differences
between various options. Suggested by Cyril Lakech.
- 2.1 Milestone 5 (06/21/2011)
- API changes
- Moved SslContextFactory and DefaultSslContextFactory classes from
internal to public org.restlet.ext.ssl package.
- Renamed Status#getName() method to getReasonPhrase() for more clarity
regarding the purpose of the additional "description" property used
for lengthier explanations.
- Added Response#isFinal() and isProvisional() methods, based on
Status#isInformational().
- Added MediaType.MESSAGE_HTTP constant.
- Enhancements
- Added OAuth 2.0 and OpenID 2.0 extensions that have been maturing
in the incubator for a while after a contribution by Ericsson Labs.
Contributed by Kristoffer Gronowski and Martin Svensson.
- Updated and consolidated the SSL/HTTPS configuration parameters
for all HTTPS connectors.
- Added a warning message to indicate that an application without a
parent component can't handle outbound calls by default.
Reported by John Logsdon and Kristoffer Gronowski.
- Allowed change of the parent context of a VirtualHost via the
setContext() method.
- Bug fixed
- Fixed compatibility issue with GWT 2.3.
- Fixed potential NPE in Restlet class when no context is available.
- Fixed potential NPE in LogFilter. Reported by Aaron Summers.
- Fixed parsing of HTTP requests with internal connector when the
Host header was missing. Now falling back to IP address.
Reported by Aaron Summers.
- Fixed misleading log message when response are manually ranged
(206 status and entity with range set). Reported by John Logsdon.
- Fixed issue causing blocking of internal HTTP/SIP connector when
the entity was coming from Apache HTTP client.
- Fixed issue causing potential loop in internal HTTP/SIP client
when the response entity wasn't being consumed immediately.
- Fixed issue causing potential IndexOutOfBounds exceptions.
- The internal server (HTTP and SIP) now automatically exhausts the
request entity if it hasn't been consumed after the writing of the
final response.
- The internal connector now calls back the ConnectorService methods.
- The internal server now calls back Representation#release() method
after sending an entity.
- Misc
- Updated Jetty to version 7.4.2.
- Added Awaitility and Hamcrest libraries required by the OAuth
extension.
- 2.1 Milestone 4 (04/27/2011)
- API changes
- Added protected redirect(...) and retry(...) methods on on ClientResource
to facilitate extension of default behavior such as passing on cookies.
Suggested by Martin Svensson.
- ClientResource#entityBuffering now buffers non transient representations of
unknown size. Necessary for GAE chunked issue.
- Added Server#getActualPort() to return either the value of getPort()
or getEphemeralPort() is the listening port is '0'.
- Message#attributes is now a ConcurrentMap instead of a Map.
Suggested by Tal Liron.
- ClientResource now respects any change to the clientInfo preferences
when using dynamic proxies (via wrap() for example). It only overwrites
them if the default preferences state (empty lists) is found at invocation
time. Suggested by Christoph Dietze.
- The visibility of several methods on UniformResource and ClientResource
has been changed to public.
- Added Protocol#SDC and ChallengeScheme#SDC constants for the
Secure Data Connector protocol.
- Enhancements
- Added new HTTPS client connector based on the internal non-blocking NIO
connector. Co-developped with NetDev.
- The SDC protocol to connect to intranets from the cloud is now also
supported on the GAE edition via the org.restlet.ext.net extension. It
automatically sets the "use_intranet" HTTP header and increases the
portability of your code between Restlet/GAE and other Restlet editions.
As SDC is natively supported on GAE, it doesn't require the
org.restlet.ext.sdc extension.
- Added a new GAE extension for the GAE edition. It provides a dedicated
authenticator based on the GAE UserService feature.
Contributed by Matt Kennedy.
- Bug fixed
- Throwing a ResourceException with a given status, was resulting in
500 status being returned to the client instead of the given status.
Reported by Avi Flax and Rhett Sutphin.
- Fixed bug with unlimited IO timeouts in internal HTTP connector.
Reported by Michael Guiral.
- Misc
- The simplified logging formatter (one line) is now available only in
the Java SE edition as it could cause troubles with Java EE container
and potentially GAE/Android as we reconfigure the default log manager
programmatically. Reported by Kristoffer Gronowski and Bo Xing.
- Moved all SSL dependencies from the engine into the "org.restlet.ext.ssl"
extension, forcing it as a new extension for several other ones such as
Jetty, Apache HTTP Client or Simple. This extension takes more importance
as it also contains the new scalable HTTPS/NIO internal connector just
added. Please ensure that your classpath is adjusted. This also helps
keeping core org.restlet.jar size small.
- 2.1 Milestone 3 (03/31/2011)
- Breaking changes
- The new support of GWT 2.2 is not backward compatible with applications
based on previous versions of GWT.
- API changes
- Deprecated the Client#connectTimeout property as it is hard to find
compared to other connector parameters. Also, it isn't available for
all connectors so it can be confusing to expose it.
Use the "socketConnectTimeoutMs" connector parameter instead or
the "maxIoIdleTimeMs" parameter for internal NIO connectors.
- Deprecated the Engine#setInstance() method to favor the
Engine#register() ones which wrap logging initialization logic
and added an Engine#clear() method to discard it altogether.
- Added an getResponseLogMessage(request, response, duration) method to
LogService class so it can be easily overridden/customized. Also
added a protected getDefaultResponseLogMessage(..) method returning the
default IIS log message.
- Added Representation#setReadListener() method to facilitate the setting
of listeners interested in new content available for reading for
selectable representations.
- Added higher level NIO event listeners in org.restlet.util package:
InputListener, ReaderListener and StringListener.
- Created a com.google.gwt.server library dedicated to the
org.restlet.gwt extension. This library will be shipped with the
JSE, JEE, GAE editions.
- Added Message#onError callback invoked by the internal connector.
Especially useful to detect if an outbound response failed to be
written at the connector level.
- Deprecated TunnelService#setHeaderTunnel() in favor of the new
setHeadersTunnel() method.
- Fixed default value of "maxQueued" for the internal connector to ensure
threads are properly created up the the "maxThreads" value entered.
Reported by Kristoffer Gronowski
- Added new Series#getValuesArray(...) method variants.
- Added ClientResource#maxRedirects property to prevent infinite
redirects, in addition to the existing infinite loop detection.
Suggested by Henry Story.
- Added ClientResource#requestEntityBuffering, responseEntityBuffering
Boolean properties and setEntityBuffering(boolean) method in order to
make transient entities reusable (retry attempts, chunk encoding issues
with GAE, response entity reuse).
- Enhancements
- Keep alive empty lines between messages in a persistent connections are
now eat silently. Reported by John Logsdon.
- Refactored the internal NIO connector to better support the differences
between HTTP and SIP protocols regarding transaction management.
- Added a new SDC extension providing a client connector for the
Google Secure Data Connector protocol compatible with the official SDC
agent.
- Bugs fixed
- Fixed bug preventing persistent connections reuse when an entity is
present. Reported by John Logsdon.
- Fixed potential issue with double consumption of SIP ACK messages.
Reported by John Logsdon.
- Fixed issue with asynchronous responses and provisional responses
preventing the resue of persistent connections.
Reported by Phil Dunks.
- Fixed NIO connector (HTTP and SIP) bug potentially causing infinite
loops. Reported by John Logsdon and Phil Dunks.
- Fixed SIP methods INFO, SUBSCRIBE and SUBSCRIBE to allow responses.
Reported by Phil Dunks.
- Fixed NIO connector regression potentially blocking a connection if
all the entity couldn't be read from the socket in one shot.
- Fixed Directory bug when handling conditional requests.
- Misc
- If the Engine#logFormatter is set to null, the log formatter of the
console is not changed anymore.
- Updated Jackson library to version 1.7.1.
- Added an "org.restlet.engine.helper" attribute to expose the internal
helper instance used by a Client or Server instance. Could be
leveraged in advanced cases for instrumentation purpose for example.
Suggested by John Logsdon.
- Updated Jetty library to version 7.3.0.
- Updated GWT library to version 2.2.0.
- 2.1 Milestone 2 (12/24/2010)
- API changes
- The org.restlet.service.TaskService is now a ScheduledExecutorService
capable of running delayed commands at fixed intervals for example.
Suggested by Kristoffer Gronowski.
- JsonRepresentation(Map<Object,Object>) signature changed to the more
precise JsonRepresentation(Map<String, Object) one.
Suggested by Tim Peierls.
- Facilitating the creation of ClientResource subclasses by changing
the visibility of handle(...) methods from private to protected.
Leveraged by the SipClientResource in the SIP extension.
Reported by Phil Dunks.
- Enhancements
- Added Request#loggable property, LogService#isLoggable(Request)
method and LogService#loggableTemplate to enable selective request
logging. Suggested by John Logsdon.
- Added setters with String parameters in addition to Text ones to
the Feed and Entry classes.
- Added an EncoderService to automatically compress sent entities
on both client and server side. Disabled by default on Application.
- Added UniformResource#requestCacheDirectives and
responseCacheDirectives properties.
- Added UniformResource#doError(Status) and doError(Status, msg)
methods to allow interception and customization of the default
behavior (such as throwing a ResourceException on the client-side).
Suggested by Florian Bucklers.
- Added a new SIP extension providing support for the Session
Initiation Protocol, largely used for voice over IP. This new
extension ships both client and server SIP connectors over TCP,
reusing the 90% of the logic used by the new NIO/HTTP internal
connector, providing excellent scalability and performance.
- Simplified the default console logging by replacing Java's default
verbose log formatter by a single line formatter. This formatter
can be modified via the static Engine#logFormatter property.
- Added easy programmatic control of log configuration via
Engine#logLevel and restletLogLevel static properties.
If regular log configuration is used via system properties, it
is taking over for backward compatibility.
- In addition to java.util.logging.SimpleFormatter, two new ones are
added: org.restlet.engine.log.SimplerFormatter and the new default
org.restlet.engine.log.SimplestFormatter.
- Removed TraceHandler class, replaced by configurable ConsoleHander
formatters.
- Improved the precision of log messages, for example giving the list
of template variables matched and their value.
Suggested by John Logsdon.
- Optimized routing when 0 characters are matched on an URI template.
- Added IoUtils.TIMEOUT_MS constant to globally configure I/O related
timeouts. Its value is 60 seconds by default, but can be configured
via the "org.restlet.engine.io.timeoutMs" system property.
- Added server-side support for Amazon Web Services (S3) authentication.
Contributed by Jean-Philippe Steinmetz.
- Added support for DecoderService on the client-side as well.
- Implemented the automatic filtering of outbound services, via the
Application#outboundRoot property.
- Added ConfidentialAuthorizer to limit access to resource to secure
protocols such as HTTPS.
- Bugs fixed
- Fixed writing of big representations. Reported by Tom Andersson.
- Fixed IoUtils.BUFFER_SIZE constant to be properly configurable via
the "org.restlet.engine.io.bufferSize" system property.
Reported by Tom Andersson.
- Fixed auto-detection of XStream annotations.
Contributed by Bruno Grieder.
- Misc
- Moved UniformResource#doCatch() logic down to ServerResource as it
was specific to server-side and kept a simpler log trace.
- Made TCP socket reuse active by default on internal connector.
Reported by John Logsdon.
- Lowered log traces for Directory. Suggested by Rickard Oberg.
- Moved exception to status conversion logic from UniformResource and
ServerResource doCatch() methods to the StatusService.
Suggested by Rhett Sutphin.
- 2.1 Milestone 1 (11/07/2010)
- API changes
- Removed deprecated classes and code.
- The Route class has been reintroduced with a lighter
behavior not depending on URI templates.
- Added an UniformResource#setApplication() setter to be able
to explicitly set the parent application used to pick up the
ConverterService or MetadataService. This property is also
carried on by the copy constructor. Suggested by John Logsdon.
- Added UniformResource#toString() for easier debugging.
- Added Representation#isSelectable() and getRegistration() method
to manipulate the registration of the NIO channel with its
associated selector and received asynchronous notifications
of available content.
- Deprecated Application#setClientRoot, renamed into a
setOutboundRoot method.
- Enhancements
- Improved the naming of files created by the FILE local
connector so that media type extension comes at the end.
- Added a fully new non-blocking NIO/HTTP connector in the engine,
in replacement of the previous one based on blocking BIO.
It has much better performance (latency, throughput and
scalability) and supports persistent connections and chunked
encoding.
- Misc
- Removed the Grizzly and Netty extensions which were still
considered experimental at this point. The new internal
connector based on non-blocking NIO now provides similar
advantages and is already more complete from a HTTP coverage
point of view. Users of these connectors are encouraged to
leverage the NIO internal connector or the two other extensions
that are still available in 2.1 (Jetty and Simple connectors).
- Added library GWT 2.1.0, removed support of GWT 2.0.