Hi, I upgraded to RC3 and am getting seriously confused.
I have to rewrite most of my application's restlet-related code, and I can't figure out how I should do it. I started with Handlers, then I replaced them with Finders (along with associated Resource classes); and now. it seems like I can attach resources to a router, and that the framework will take care of the finder. My problem is that I don't understand what the Resource classes are supposed to do. Tthe tutorial and the code from the example directory are very different; I'm not sure which one I should follow. Let me give you an example. I want to create beans with: POST /bean HTTP/1.1 Host: localhost:8182 Accept: application/xml name=titi and have the server return an xml representation of the newly created object. Beans a retrieve with: GET /bean/we HTTP/1.1 Host: localhost:8182 Accept: application/xml Here is the code: public static class MyBean{ public MyBean(String name){this.name = name;} public String name; } public static class MyBeanResource extends Resource{ private MyBean myBean; public MyBeanResource(Context context, Request request, Response response){[...]} @Override public boolean allowPost() {return true;} @Override public boolean allowGet() {return true;} @Override public List<Variant> getVariants(){[...]} @Override public void post( Representation entity){[...]} @Override public Representation getRepresentation(Variant variant) { [,,,]} } public void main(String[] args){ Application application = new Application() { @Override public Restlet createRoot() { Router router = new Router(getContext()); router.attach("/bean", MyBeanResource.class); return router; } }; [...] component.start(); } The finder uses reflection to build a MyResource object. So for a GET, the constructor should retrieve the approriate bean: public MyBeanResource(Context context, Request request, Response response){ super(context,request,response); String name = request.getResourceRef().getLastSegment(); myBean = new MyBean(name); } So far so good, but what about POSTs? Should the constructor check the method type, like so: public MyBeanResource(Context context, Request request, Response response){ super(context,request,response); if (request.getMethod().equals(Method.GET)) { String name = request.getResourceRef().getLastSegment(); myBean = new MyBean(name); } else { // it's a POST - nothing to do. } } This doesn't sound right. Now, the getVariants method. Is its purpose to return all the representation types the resource can have (text/plain, application/xml, etc.)?. @Override public List<Variant> getVariants(){ Variant v = new Variant(MediaType.TEXT_PLAIN); List<Variant> variants = new ArrayList<Variant>(); variants.add(new Variant(MediaType.TEXT_PLAIN); variants.add(new Variant(MediaType.APPLICATION_XML)); return variants; } The getRepresentation seems pretty straightforward: @Override public Representation getRepresentation(Variant variant) { if (variant.getMediaType().equals(...)){ return new StringRepresentation(myBean.name); } else if (variant.getMediaType().equals(...)){ return new.... } else { return new StringRepresentation(myBean.name); } } As for the post method I would do something like: @Override public void post( Representation entity){ // create the bean Form form = new Form(entity); String name = form.getValues("name"); myBean = new MyBean(name); getResponse().setStatus(Status.SUCCESS_CREATED); getResponse().setRedirectRef("http://localhost:8182/bean/" + name); // return a representation of the newly created bean getResponse().setEntity(this.getRepresentation(???); } But, how do I have access to the client's preferred variant (application/xml in this case)? Any clarification is welcome. Thanks, -Vincent.