Hi John,
Thanks for the report. Ive just fixed the bug regarding default route in WadlApplication. Checked in SVN trunk and 1.1 branch. Best regards, Jerome Louvel -- Restlet ~ Founder and Technical Lead ~ <http://www.restlet.org/> http://www.restlet.org Noelios Technologies ~ <http://www.noelios.com/> http://www.noelios.com De : John Wismar [mailto:[email protected]] Envoyé : mardi 26 janvier 2010 20:33 À : [email protected] Objet : Re: Using WADL classes with filters - use WadlWrapper? -- solved, but with open questions Thierry Boileau <[email protected]> wrote on 01/26/2010 02:21:31 AM: > > could you provide a sample application? Hi, Thierry- I'm having a little trouble getting a sample app put together that demonstrates the exact behavior - I'm not getting ANY response in my sample app, even though it looks like it's trying to return exactly the WadlRepresentation I've described. The Response entity isn't making it back into my httpclient.OptionsMethod's response body, for some reason. That exercise has helped me figure out what's going on, though. There's a wrinkle in what I'm doing, and it's why I'm having a problem. I route to resource A using either { <http://myhost/a> http://myhost/a} or { <https://myhost/a> https://myhost/a} but I route to resource B using only { <https://myhost/b> https://myhost/b}. If a request comes in for { <http://myhost/b> http://myhost/b}, I redirect to { <https://myhost/b> https://myhost/b} using a filter. This works great - I don't know if it's the preferred solution, but I've had no difficulty with it. @Override public Restlet createRoot() { Context context = getContext(); Router rootRouter = new Router(context); Router httpsRouter = new Router(context); Filter redirectToHttpsFilter = new Filter() { @Override protected int beforeHandle(Request request, Response response) { org.restlet.data.Protocol protocol = request.getProtocol(); if (protocol.equals(org.restlet.data.Protocol.HTTP)) { Reference ref = request.getResourceRef(); String hostDomain = ref.getHostDomain(); String path = ref.getPath(); response.redirectPermanent("https://" + hostDomain + ":8443" + path); return STOP; } return super.beforeHandle(request, response); } }; rootRouter.attach("/a", ResourceA.class).setMatchingMode(Template.MODE_EQUALS); rootRouter.attachDefault(redirectToHttpsFilter); redirectToHttpsFilter.setNext(httpsRouter); httpsRouter.attach("/b", ResourceB.class).setMatchingMode(Template.MODE_EQUALS); return rootRouter; } Here's what seems to be happening with the WADL stuff: when the ResourceInfo is created for rootRouter, it calls getResourceInfos(), which goes through all of its routes and retrieves the children's ResourceInfos. However, because the filter is configued as the "default" without a route, it doesn't get enumerated. Using the code above, when I step through getResourceInfos(), router.routes has one entry ("/a"), and router.defaultRoute is not checked. I changed the code above by explicitly adding: rootRouter.attachDefault(redirectToHttpsFilter); rootRouter.attach("", redirectToHttpsFilter); and everything seems to be working now. Remaining questions: should Router.attachDefault() add the new default route to Router.routes? Or should WadlApplication.getResourceInfos() check to make sure that it looks at the defaultRoute if it isn't included in the routes list? Anyway, thanks for your help! -------------------------------- John Wismar <mailto:[email protected]> mailto:[email protected] From: Thierry Boileau <[email protected]> To: [email protected] Date: 01/26/2010 02:21 AM Subject: Re: Using WADL classes with filters - use WadlWrapper? _____ Hello John, could you provide a sample application? I've just tried with a WadlApplication and WadlResources (having the same routing plan than you) and it works for me: that is to say when I send a request option to the application root URI, I get the description of all resources. The WadlApplication is normally able to walk across filters. Best regards, Thierry Boileau Hi, all- I'm using Restlet 1.1.7. I have a situation where my routing chain looks like: router +- filter -- filter -- router +- resource C +- resource A +- resource D +- resource B +- etc.... My Application and all Resources are Wadl- versions. When I retrieve the WADL for my app, I get the information about the resource A and resource B, but not C, D, and so on. I'm guessing that I can solve this by using WadlWrapper to wrap the filters I'm using, but it's not clear to me how that is intended to work. Does anyone have any sample code that shows WadlWrapper in action? Or any hints about how the filters can be wrapped, and the ResourceInfo initialized and returned? Or am I looking at this the wrong way, and is there a different way to retrieve the information about the Resources behind the filters? Thanks for your help! -------------------------------- John Wismar ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2450021

