Hi John,

 

Thanks for the report. I’ve 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

Reply via email to