Hello,

I've just tried a short-cut to return the representation after a PUT: 
calling get(variant), but it doesn't work as if it was doing a direct 
GET. I'm not sure if it's a just a bad idea or if we should try to make 
it work.

The test case looks like this:

public MyClass extends ServerResource {
   @Get("xml")
   public Document toXml() {
      return ...;
   }

   public Representation put(Representation input, Variant variant) {
     // Do something with input.

     return get(variant);
   }
}


The problem with this approach is that 'variant' is not an instance of 
'VariantInfo', so in ServerResource.get(Variant), doHandle isn't called:
      if (variant instanceof VariantInfo) {
          result = doHandle(((VariantInfo) variant).getAnnotationInfo(),
              variant);
      } else {
          setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED);
      }



To make get(variant) from a variant that's not a VariantInfo, something 
like the following patch could work. I'm just not sure if it's worth 
doing it this way. Any thoughts?

Best wishes,

Bruno.



diff --git 
a/modules/org.restlet/src/org/restlet/resource/ServerResource.java 
b/modules/org.restlet/src/org/restlet/resource/ServerResource.java
index 1dfee23..39dd86d 100644
--- a/modules/org.restlet/src/org/restlet/resource/ServerResource.java
+++ b/modules/org.restlet/src/org/restlet/resource/ServerResource.java
@@ -635,9 +635,31 @@ public abstract class ServerResource extends 
UniformResource {
      protected Representation get(Variant variant) throws 
ResourceException {
          Representation result = null;

+        VariantInfo variantInfo = null;
+
          if (variant instanceof VariantInfo) {
-            result = doHandle(((VariantInfo) variant).getAnnotationInfo(),
-                    variant);
+            variantInfo = (VariantInfo) variant;
+        } else {
+            List<Variant> annoVariants = null;
+            for (AnnotationInfo annotationInfo : getAnnotations()) {
+                if (Method.GET.equals(annotationInfo.getRestletMethod())) {
+                    annoVariants = annotationInfo.getResponseVariants(null,
+                            getMetadataService(), getConverterService());
+                    if (annoVariants != null) {
+                        for (Variant v : annoVariants) {
+                            if (v.isCompatible(variant)) {
+                                variantInfo = new VariantInfo(variant,
+                                        annotationInfo);
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+
+        if (variantInfo != null) {
+            result = doHandle(variantInfo.getAnnotationInfo(), variant);
          } else {
              setStatus(Status.CLIENT_ERROR_METHOD_NOT_ALLOWED);
          }

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

Reply via email to