cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Brad <b...@javawork.co.uk>
Subject Re: Question about JAX-RS Sub resources
Date Mon, 28 Apr 2008 13:49:46 GMT
Sergey,

yeah I think that would improve things a lot, thanks for the tips.

On Mon, Apr 28, 2008 at 2:33 PM, Sergey Beryozkin
<sergey.beryozkin@iona.com> wrote:
> 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 <brad@javawork.co.uk> 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
>  >>  <sergey.beryozkin@iona.com> 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" <joshua.purcell@gmail.com>
>  >>  >  To: <users@cxf.apache.org>
>  >>  >  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
>

Mime
View raw message