it doesn't seem to work, maybe because the type is not matching:

/foo/123
/foo/{id}

here id and 123 are long so it works but

/foo/{id}
/foo/bar

here id and bar have different types so it doesn't match.

am i wrong?

- Romain

2011/10/13 Sergey Beryozkin <sberyoz...@gmail.com>

> Hi
>
>
> On 12/10/11 21:34, Romain Manni-Bucau wrote:
>
>> Hi,
>>
>> thanks for this reply,
>>
>> i use cxf through OpenEJB and the version is the 2.4.1, do you know if it
>> was already included?
>>
>
> There was only one relevant fix after 2.4.1:
> https://issues.apache.org/**jira/browse/CXF-3608<https://issues.apache.org/jira/browse/CXF-3608>
>
> If you have in 2.4.1
>
> class Root {
> @Path("/foo/bar")
> SomeSubresource getSubresource() {}
>
> @Path("/foo/{id}")
> @GET
> SomeData get(@PathParam("id") Long id) {}
>
> }
>
> then indeed, /foo/bar will be wrongly handled by get(). May be you are
> seeing exactly this issue in 2.4.1. That must be fixed in 2.4.2 - give it a
> try please
>
> thanks, Sergey
>
>
>
>
>> - Romain
>>
>> 2011/10/12 Sergey Beryozkin<sberyoz...@gmail.com**>
>>
>>  Hi
>>>
>>> That must work, which CXF version do you use ?
>>>
>>> I've added a test locally and it just works, see the diff below as this
>>> has
>>> to be already tested on the trunk, so I'm not merging it at the moment.
>>>
>>> Try please 2.3.7/2.4.3
>>>
>>> thanks, Sergey
>>>
>>>
>>> Index: src/test/java/org/apache/cxf/****systest/jaxrs/**
>>> JAXRSClientServerBookTest.java
>>> ==============================****============================**
>>> ==**=======
>>> --- src/test/java/org/apache/cxf/****systest/jaxrs/****
>>> JAXRSClientServerBookTest.java
>>>   (revision 1182563)
>>> +++ src/test/java/org/apache/cxf/****systest/jaxrs/****
>>> JAXRSClientServerBookTest.java
>>>
>>>   (working copy)
>>> @@ -950,6 +950,20 @@
>>>     }
>>>
>>>     @Test
>>> +    public void testGetBook222() throws Exception {
>>> +        WebClient wc = WebClient.create("http://****localhost<
>>> http://localhost>:"
>>>
>>> + PORT + "/bookstore/books/222");
>>> +        Book book = wc.get(Book.class);
>>> +        assertEquals(222L, book.getId());
>>> +    }
>>> +
>>> +    @Test
>>> +    public void testGetBook333() throws Exception {
>>> +        WebClient wc = WebClient.create("http://****localhost<
>>> http://localhost>:"
>>>
>>> + PORT + "/bookstore/books/333");
>>> +        Book book = wc.get(Book.class);
>>> +        assertEquals(333L, book.getId());
>>> +    }
>>> +
>>> +    @Test
>>>     public void testGetBook123() throws Exception {
>>>         getAndCompareAsStrings("http:/****/localhost<http://localhost>**:"
>>> +
>>> PORT + "/bookstore/books/123",
>>>                                "resources/expected_get_****book123.txt",
>>> Index: src/test/java/org/apache/cxf/****systest/jaxrs/BookStore.java
>>> ==============================****============================**
>>> ==**=======
>>> --- src/test/java/org/apache/cxf/****systest/jaxrs/BookStore.java
>>> (revision 1176840)
>>> +++ src/test/java/org/apache/cxf/****systest/jaxrs/BookStore.java
>>> (working
>>>
>>> copy)
>>> @@ -477,12 +477,25 @@
>>>     }
>>>
>>>     @GET
>>> +    @Path("/books/222")
>>> +    @Produces("application/xml")
>>> +    public Book getBook222(@PathParam("bookId"****) String id) throws
>>>
>>> BookNotFoundFault {
>>> +        return new Book("222", 222);
>>> +    }
>>> +
>>> +    @GET
>>>     @Path("/books/{bookId}/")
>>>     @Produces("application/xml")
>>>     public Book getBook(@PathParam("bookId") String id) throws
>>> BookNotFoundFault {
>>>         return doGetBook(id);
>>>     }
>>>
>>> +    @GET
>>> +    @Path("/books/333")
>>> +    @Produces("application/xml")
>>> +    public Book getBook333(@PathParam("bookId"****) String id) throws
>>>
>>> BookNotFoundFault {
>>> +        return new Book("333", 333);
>>> +    }
>>>
>>>
>>>     @GET
>>>
>>>
>>> On 12/10/11 19:19, Romain Manni-Bucau wrote:
>>>
>>>  Hi,
>>>>
>>>> i wonder if it is normal (which i don't think if i write this mail) or
>>>> not:
>>>>
>>>> why cxf is taken the first method matching a uri pattern when a rest
>>>> service
>>>> is called?
>>>>
>>>> as an example is clearer than any speech:
>>>>
>>>> why these patterns are not guarantee to work:
>>>>
>>>> /foo/{id} # id = Long for instance
>>>> /foo/bar
>>>>
>>>> as the first one will match the second one the result will depend on the
>>>> order of declaration and if the second takes the first one an error will
>>>> appear, something like bar cannot be converted to Long.
>>>>
>>>> - Romain
>>>>
>>>>
>>>>
>>>
>>
>

Reply via email to