cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Romain Manni-Bucau <rmannibu...@gmail.com>
Subject Re: rest matching patterns
Date Thu, 13 Oct 2011 21:40:14 GMT
yep in 2.4.3 it works (i think the snapshot was not deployed last time)

sorry the my last useless mail and thank you very much for your time

- Romain

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

> Hi
>
> Have a look at these revisions:
>
> trunk: http://svn.apache.org/viewvc?**rev=1183107&view=rev<http://svn.apache.org/viewvc?rev=1183107&view=rev>
> 2.4.4-SNAPSHOT: http://svn.apache.org/viewvc?**rev=1183113&view=rev<http://svn.apache.org/viewvc?rev=1183113&view=rev>
>
> It just works. So I'm wondering, if it the fact that the invocation is
> going through OpenEJB integration layer that makes a difference ?
>
> You asked on IRC if it made sense to change JAXRSUtils.findTargetMethod a
> bit to make things work - can you please check why the wrong method is
> selected there in your case ? Alternatively, please open a JIRA and attach a
> test maven project
>
> Thanks, Sergey
>
>
> On 13/10/11 18:55, Romain Manni-Bucau wrote:
>
>> sorry,
>>
>> it is:
>> @GET @Path("/bar) String foo()
>> and
>> @GET @Path("/{id}") String foo(@PathParam("id"}) Long id)
>>
>> and the parent has the annotation @Path("/foo"). I tried with some
>> @Produces
>> to specify plain text or xml media type but the error is the same. There
>> is
>> no consume (so no filtering at this level).
>>
>> - Romain
>>
>> 2011/10/13 Sergey Beryozkin<sberyozkin@gmail.com**>
>>
>>  Give me the complete info please: @PathParam, HTTP verb present on both
>>> methods or not, @Consumes/@Produces,
>>> I'm assuming it is @Path("/foo/bar") for foo() and @Path("/foo/{id}") for
>>> foo(Lomg l)
>>>
>>>
>>> On 13/10/11 17:01, Romain Manni-Bucau wrote:
>>>
>>>  I tried 2.4.3.
>>>>
>>>> Signature 1 foo()
>>>> Signature 2 foo(Long l)
>>>>
>>>> - Romain
>>>>
>>>> Le 13 oct. 2011 17:55, "Sergey Beryozkin"<sberyozkin@gmail.****com<
>>>> sberyozkin@gmail.com>>
>>>>
>>>>  a écrit :
>>>>
>>>>  It does not work with 2.4.2 ?
>>>>
>>>>>
>>>>> Can you also send me the signature of the 2 methods ?
>>>>>
>>>>> cheers, Sergey
>>>>>
>>>>> On 13/10/11 16:46, Romain Manni-Bucau wrote:
>>>>>
>>>>>  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<sberyozkin@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>
>>>>>>> <https:/**/issues.apache.org/****jira/**browse/CXF-3608<https://issues.apache.org/****jira/browse/CXF-3608>
>>>>>>> >
>>>>>>> <https://**issues.apache.org/****jira/**browse/CXF-3608<http://issues.apache.org/**jira/**browse/CXF-3608>
>>>>>>> <https:**//issues.apache.org/**jira/**browse/CXF-3608<https://issues.apache.org/**jira/browse/CXF-3608>
>>>>>>> >
>>>>>>>
>>>>>>>>
>>>>>>>>  <https://**issues.apache.org/****jira/browse/**CXF-3608<http://issues.apache.org/**jira/browse/**CXF-3608>
>>>>>>> <http:/**/issues.apache.org/jira/**browse/**CXF-3608<http://issues.apache.org/jira/browse/**CXF-3608>
>>>>>>> >
>>>>>>> <https:/**/issues.apache.org/**jira/**browse/CXF-3608<http://issues.apache.org/jira/**browse/CXF-3608>
>>>>>>> <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<sberyozkin@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<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
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message