Hi Joe,

Thanks for precisely reporting this issue! 

I've just fixed it in SVN trunk and added a non-regression test case.

Best regards,
Jerome Louvel
--
Restlet ~ Founder and Lead developer ~ http://www.restlet.org
Noelios Technologies ~ Co-founder ~ http://www.noelios.com



-----Message d'origine-----
De : Joe Nellis [mailto:newsgro...@jnellis.net] 
Envoyé : dimanche 26 juillet 2009 01:58
À : discuss@restlet.tigris.org
Objet : Empty @Get() annotation overwrites already retrieved representation
mimetype

Greetings,

The following code at ServerResource#doHandle(AnnotationInfo ,Variant )
seems backwards perhaps. (2.0m3snapshot)

            if (resultObject != null) {
                // TODO This is a shortcut in case the resource does not
                // precise the media-type of the representation. This should
be
                // enhanced, maybe with a media type "unknown" for the
                // negotiated variant.
                if (resultObject instanceof Representation) {
                    result = (Representation) resultObject;
                    if (variant.getCharacterSet() != null) {
                        result.setCharacterSet(variant.getCharacterSet());
                    } else if (variant.getMediaType() != null) {
                        result.setMediaType(variant.getMediaType());
                    } else if ((variant.getLanguages() != null)
                            && !variant.getLanguages().isEmpty()) {
                        result.setLanguages(variant.getLanguages());
                    } else if ((variant.getEncodings() != null)
                            && !variant.getEncodings().isEmpty()) {
                        result.setEncodings(variant.getEncodings());
                    }
                } else {
                    result = cs.toRepresentation(resultObject, variant,
this);
                }
            }

So what is the purpose of this code and were the Else-If's the intended
logic?  The "variant" variable is ultimately from the
ClientInfo.getPreferredVariant and such if we are testing for
Representations that don't have variant "stuff" set then testing the client
preferred variant being set for these things doesn't seem the right
direction to take. The else if's make these checks short circuit if one is
true, why is that?

Currently if you use a @Get() annotation with no extention value or "" this
bit of code will get your representation's media type overwritten with some
other media type. When I use riap via a getClientDispatcher it overwrites it
with 'application/json' but normally it does it with 'application/xml'.

Sincerely,
Joe Nellis

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=23755
93

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2375632

Reply via email to