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=990487