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

Reply via email to