Hi Brad
You probably should be able to drop
> @Path(value="", limited=true)
altogether now.
Also if you only deal with application/xml then you might want to hoist the
Consume/Produce annotations to the top :
@Path(value="/{user}/mail")
@ConsumeMime("application/xml")
@ProduceMime("application/xml")
public class MailService {
@GET
public String listMail(@PathParam("user")String user){
...
}
@Path(value="{messageId}")
@GET
public String readMessage(@PathParam("messageId")String messageId){
...
}
}
and then override them if necessary on methods which can support some other
format.
By the way, if you'd like to have a user param available to readMessage then
you should be able to do :
@Path(value="{messageId}")
@GET
public String readMessage(@PathParam("user")String user,
@PathParam("messageId")String messageId){
...
}
Cheers, Sergey
> Ok, fixed now. What I should have had was :
>
> @Path(value="/{user}/mail")
> public class MailService {
>
> @Path(value="", limited=true)
> @GET
> @ConsumeMime("application/xml")
> @ProduceMime("application/xml")
> public String listMail(@PathParam("user")String user){
> ...
> }
>
> @Path(value="{messageId}")
> @GET
> @ConsumeMime("application/xml")
> @ProduceMime("application/xml")
> public String readMessage(@PathParam("messageId")String messageId){
> ...
> }
> }
>
> Thanks for the pointer Sergey.
>
> On Mon, Apr 28, 2008 at 1:43 PM, Brad <[EMAIL PROTECTED]> wrote:
>> Hi Sergey,
>>
>> I'm also trying to get this to work, so I was glad to see your email.
>> I tried the annotations you suggested:
>>
>> @Path(value="/{user}/mail")
>> public class MailService {
>>
>> @GET
>> @ConsumeMime("application/xml")
>> @ProduceMime("application/xml")
>> public String listMail(@PathParam("user")String user){
>> ...
>> }
>>
>> @Path(value="{messageId}")
>> @GET
>> @ConsumeMime("application/xml")
>> @ProduceMime("application/xml")
>> public String readMessage(@PathParam("messageId")String messageId){
>> ...
>> }
>> }
>>
>> I test it by going to http://localhost:8080/cxf/rest/test/user/mail.
>> It always ignores listMail and instead does readMessage with a null
>> messageId.
>>
>> If I comment out readMessage it will invoke listMail.
>>
>> Any tips?
>>
>> Thanks,
>> Brad.
>>
>>
>>
>> On Mon, Apr 28, 2008 at 10:24 AM, Sergey Beryozkin
>> <[EMAIL PROTECTED]> wrote:
>> > Thanks...
>> >
>> > The problem is actually with these Path annotations :
>> >
>> >
>> > >> @Path("/users/")
>> > >> public class UserService {
>> > >>
>> > >> @Path("/users/{id}/")
>> > >> public User getUser(@PathParam("id") String id) {
>> > >> ... // load from db
>> > >> }
>> > >>
>> > >> ...
>> > >>
>> > >> }
>> >
>> > it should be
>> >
>> >
>> > @Path("/users/")
>> > public class UserService {
>> >
>> > @Path("{id}")
>> >
>> > public User getUser(@PathParam("id") String id) {
>> > ... // load from db
>> > }
>> >
>> > }
>> >
>> > The Path annotations on the root resource class are 'inherited' and
>> concatenated with the one on the resource method getUser()...
>> >
>> > For example to get a collection of users one can do
>> >
>> >
>> > @Path("/users/")
>> > public class UserService {
>> >
>> > @GET
>> > public Users getUsers() {
>> > ...
>> > }
>> >
>> > @Path("{id}")
>> >
>> > public User getUser(@PathParam("id") String id) {
>> > ... // load from db
>> > }
>> >
>> > }
>> >
>> > Cheers, Sergey
>> >
>> >
>> >
>> > ----- Original Message -----
>> > From: "Joshua Purcell" <[EMAIL PROTECTED]>
>> > To: <[email protected]>
>> > Sent: Monday, April 28, 2008 5:26 AM
>> > Subject: Re: Question about JAX-RS Sub resources
>> >
>> >
>> > >
>> > > Your example is a little different from the sample JAX-RS code
>> included with
>> > > the CXF snapshot. This may work better for you:
>> > > @Path("/userservice/")
>> > > public class UserService {
>> > > @Path("/users/{id}/")
>> > > public User getUser(@PathParam("id") String id) {
>> > > ... // load from db
>> > > }
>> > > }
>> >
>> > ----------------------------
>> > IONA Technologies PLC (registered in Ireland)
>> > Registered Number: 171387
>> > Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
>> >
>>
----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland