Hi Thierry, Thanks you very much for ur help.
thanks Prashant > Hi, > > if you let the default variable type (which is "URI_SEGMENT"), > "/language/temp/12345.12345/java/" will match > "/language/{var1}/{var2}/java/" and won't match "/language/{var1}/{var2}/" . > > If you need to play with the variable types , things become difficult, > because when creating the routes, you need to know how to update such > variable for such route. > A solution is to rely on a convention and to associate type and name of > a variable in the URI template: for example > "/language/{var1-digit}/{var2-all}/java/". > By convention, you can say that "var1-digit" means variable with name > "var1" and type "TYPE_DIGIT". > This is not very pretty and is just an idea, but I don't see obvious and > simple solution since the start point is a map of key/value. > > best regards, > Thierry Boileau > > > > Hi Thierry, > > > > Thanks for response. > > At this point of time please ignore my first mail. > > Currently > > My use case is something like the one given below: > > > > I have a map object containing all the URIs to be attached in router. > > Entries in this map are like: > > > > map.put("/language/{var1}/{var2}/java/","com.mypackage.Restlet1"); > > > > map.put("/language/{var1}/{var2}/","com.mypackage.Restlet2"); > > > > in my application class's createRoot() method > > I iterate over this map and attach each entry in router. > > > > Now,I have a filter class and In beforeHandle() method of that class I am > > trying to iterate over each template from Router list and want to find out > > the exact matching template for the formatted URI string from request i.e. > > /language/temp/12345.12345/java/ > > To achieve this I have written the code as given in my previous mail. > > > > But the code in previous mail does not match with exact URI but it matches > > with both the entries of map. > > > > So, my question is how should I modify my code to get only one entry i.e. > > /language/{var1}/{var2}/java/ for request > > /language/temp/12345.12345/java/ and not > > /language/{var1}/{var2}/ > > > > Hope it clears. > > > > Thanks > > Prashant > > > > > >> Hi Prashant, > >> > >> the problem is that the type of the variable is "Variable.TYPE_URI_ALL" > >> which means that it matches every characters. So > >> "/language/test/12345/java/" can match "/language/{var1}/{var2}/" > >> with "var1 variable valuated to "test/12345" and "var2" to "java". > >> By default, a variable matches a URI segment. > >> > >> Could you explain a little bit more your use case? > >> Coming back to your first mail, you told us that "/language/12345/java/" > >> cannot match "/language/{var1}/{var2}/". But why? What are the rules > >> applied to each variables? > >> > >> Best regards, > >> Thierry Boileau > >> -- > >> Restlet ~ Core developer ~ http://www.restlet.org > >> Noelios Technologies ~ Co-founder ~ http://www.noelios.com > >> > >> > >>> Hi Thierry, > >>> > >>> Thank you very much for your response. > >>> Whatever you explained its fine. But problem in my application is, I have > >>> to write code to match the incoming formatted URI with a template(stored > >>> in a collection). > >>> > >>> I am using Template.match(String) method in my code to match formatted > >>> URI with a template pattern. > >>> > >>> Now, what this match method is doing it is returning two matches. > >>> > >>> E.g. > >>> /language/{var1}/{var2}/ > >>> /language/{var1}/{var2}/java/ > >>> > >>> If i send a request to my application with URI > >>> /language/test/12345/java/ > >>> > >>> and try to match using Template.match() method, it is returning > >>> > >>> two results. > >>> > >>> Code is something like: > >>> > >>> Reference URI = request.getResourceRef(); > >>> Router router = (Router) getNext(); > >>> RouteList list = router.getRoutes(); > >>> Iterator<Route> itr = list.listIterator(); > >>> while(itr.hasNext()) > >>> { > >>> Route route = itr.next(); > >>> route.getTemplate().getDefaultVariable().setType(Variable.TYPE_URI_ALL); > >>> > >>> route.getTemplate().setMatchingMode(Template.MODE_EQUALS); > >>> > >>> if(route.getTemplate().match(URI.getRemainingPart())!=-1) > >>> { > >>> logger.debug("Match found:"); > >>> } > >>> } > >>> > >>> The above given code logs "Match found:" two times for both the URIs. > >>> > >>> > >>> Thanks > >>> Prashant > >>> > >>> > >>> > >>>> Hello prashant, > >>>> > >>>> you can specify the type of a single variable as follow: > >>>> Route route = router.attach("/language/{var1}/{var2}/", restlet1); > >>>> route.getTemplate().getVariables().put("var1", new > >>>> Variable(Variable.TYPE_ALPHA)); > >>>> > >>>> > >>>> I also send you a sample application that illustrates this. > >>>> > >>>> best regards, > >>>> Thierry Boileau > >>>> > >>>> > >>>> > >>>>> Hi All, > >>>>> > >>>>> I am new to Restlets even after working for around last 8 months on > >>>>> restlets. :-) > >>>>> > >>>>> I am facing a problem with my application. > >>>>> > >>>>> Description is as follows: > >>>>> > >>>>> In my application class I have two REST URIs as given below: > >>>>> > >>>>> (1st) "/language/{var1}/{var2}/" > >>>>> (2nd) "/language/{var1}/{var2}/java/" > >>>>> > >>>>> I have also set Default matching mode of the router to MODE_EQUALS. > >>>>> > >>>>> Now, if I test second URI with not providing value for one of the > >>>>> varibales e.g. > >>>>> /language/12345/java/ > >>>>> (Note: value for var1 is missing in this URI) > >>>>> > >>>>> My Router is matching this URI with first URI template and executes > >>>>> restlet class assgined to first URI i.e "/language/{var1}/{var2}/" > >>>>> > >>>>> Ideally if i have set matching mode to MODE_EQUALS for router it should > >>>>> show a message "server has not found anything matching requested URI" > >>>>> with response code "404". > >>>>> > >>>>> Please help me coming out of this problem. I have also tries with > >>>>> changin type of default varibale but no luck. > >>>>> > >>>>> Thanks in advance. > >>>>> Prashant > >>>>> > >>>>> ------------------------------------------------------ > >>>>> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=989509 > >>>>> > > > > ------------------------------------------------------ http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=991303