Hi,
One small comment re:
> @Variant("xml")
> Representation toXml();
I might make the annotation @RepresentsVariant("xml") (or similar) to
allow the possibility for @AcceptsVariant("xml") or
@StoresVariant("xml").
Rhett
On Jan 20, 2009, at 2:21 PM, Jerome Louvel wrote:
> Hi Tim,
>
> Thanks for the frank feed-back.
>
> I do like type safety-ness very much but I don't see how the usage
> of annotations would help here. My understanding is that there are
> two ways to deal with annotations:
> •
> At compile time, using 'javac' (Java 6) or 'apt' (Java 5)
> •
> At runtime, if the annotation have been properly preserved
> In our case, we need extra info to be able to properly guess the
> variants and dispatch the resource thread to the matching method.
> This extra info can be either based on a method name convention or
> on a runtime annotation, but the dispatching has to be done
> dynamically, using Java reflection.
>
> The other way would be to automatically generate Java source code
> based on those annotations to hard code the dispatching. But I'm not
> sure you want to go on this road which seems slippery to me,
> especially under Java 5 where it would require using the additional
> 'apt' tool.
>
> So, if we are back using runtime annotations, there is no particular
> type safety in play:
>
> Representation representXml();
>
> would be as good (and even more compact) as:
>
> @Variant("xml")
> Representation toXml();
>
> or if you want to be more explicit about the mediatype:
>
> @Variant("text/xml")
> Representation toXml();
>
> I really prefer the simplicity of the first option. It is a naming
> style close the the JavaBean getter and setter methods, which are
> widely used and accepted.
>
> Regarding the definitive inclusion in Restlet 1.2, it can be fully
> changed or reverted while we are in the milestone phase. Once we
> reach 1.2 RC1 however, those changes will become final, unless a
> serious security issue occurs.
>
> So, we could play with the new feature for a while and see how other
> users react. Meanwhile, we can definitely continue the debate!
>
> Best regards,
> Jérôme Louvel
> --
> Restlet ~ Founder and Lead developer ~ http://www.restlet.org
> Noelios Technologies ~ Co-founder ~ http://www.noelios.com
>
>
> De : [email protected] [mailto:[email protected]] De la part de
> Tim Peierls
> Envoyé : vendredi 16 janvier 2009 17:10
> À : [email protected]
> Objet : Re: media type adaptor
>
> While this is undeniably convenient, it deserves more thought and
> discussion before accepting as part of 1.2. I don't think it's a
> good idea as it stands.
>
> Item 35 of Josh Bloch's Effective Java (2nd edition) is "Prefer
> annotations to naming patterns". One of the great strengths of Java
> is its type-safety, an important reason why Java is such a good
> choice for production web services. Naming patterns rely on
> conventions that are invisible to the compiler; they throw away the
> opportunity to enforce typing rules at compile time. The use of
> metadata (annotations), by contrast, lets the compiler work for you
> by catching type problems early.
>
> I'm talking specifically about using method-level annotations
> instead of method naming patterns in the case of Resource methods
> related to variant representations. I'm not trying to take this line
> of reasoning any farther. For example, while I'm not crazy about
> allow* and handle*, at least that's in Handler, not Resource, and
> even there Restlet *does* define the standard methods (Get/Put/Post/
> Delete/Head/Options) explicitly.
>
> --tim
>
> On Fri, Jan 16, 2009 at 9:05 AM, Jerome Louvel <[email protected]
> > wrote:
> To illustrate the new feature, here is the test resource class that
> I used in the unit test:
>
> public class AutoDetectResource extends Resource {
>
>
> public Representation representXml() {
> return new StringRepresentation("<root>test</root>",
> MediaType.TEXT_XML);
> }
>
> public Representation representHtmlEn() {
> return new StringRepresentation("<html>test EN</html>",
> MediaType.TEXT_HTML);
> }
>
>
> public Representation representHtmlFr() {
> return new StringRepresentation("<html>test FR</html>",
> MediaType.TEXT_HTML);
> }
>
>
> }
>
> No need in this case to override the constructor, to update the
> variants' list or to manually handle the dispatching!
>
------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=1039013