You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by "KARR, DAVID (ATTCINW)" <dk...@att.com> on 2009/09/17 22:54:57 UTC

What should happen with intermediate resource paths that end with "/"?

So if I have a '@Path("/catalog/")' on my class, and
'@Path("/item/{id}")' on a method of the class, what URL should be
matched by the method?  In my testing, it matches perfectly fine with
"/catalog/item/1".  However, when SoapUI loads the WADL file for this
project, it results in a path like "/catalog//item/1", which fails in my
service, of course.  When I then removed the trailing slashes from my
annotations and reran the test with SoapUI, it worked fine.

So, does JAX-RS specifically disallow trailing slashes, or does it
specify that tools should remove consecutive slashes when building URLs?

Re: What should happen with intermediate resource paths that end with "/"?

Posted by Sergey Beryozkin <sb...@progress.com>.
Hi,

The Path values you've specified are perfectly fine, it does not really matter whether you have
@Path("/catalog") or @Path("/catalog/") for a URI like "/catalog/item/1" matched against the method
annotated with "/catalog/item/1". This is due to a selection algorithm defined by JAXRS authors.

It's really a bug in SoapUI. For example, a CXF Client API uses another good JAX-RS piece which is UriBuilder which
takes care of duplicate or missing slashes, etc. So yes, either remove a trailing slash from @Path("/catalog/") or remove a leading 
one from "/catalog/item/{id}" to have SoapUI working better.

Now as far as a trailing slash is concerned it can make a difference when selecting between multiple candidates. Example :

@Path("catalog")
public class Catalog1 {
   @GET
   List<Item> getAll() {}
}

@Path("catalog/")
@XmlRootElement
public class Catalog2 {

   @GET
   Catalog2 get() {}

   @GET
   @Path("/item/{id}")
   Item getIteam(@PathParam("id") int i) {}
}

"GET /catalog" will result in Catalog1 root resource class being selected, and its getAll() method being called.
"GET /catalog/" will result in Catalog2 root resource class being selected, and its get() method being called.

cheers, Sergey

----- Original Message ----- 
From: "KARR, DAVID (ATTCINW)" <dk...@att.com>
To: <us...@cxf.apache.org>
Sent: Thursday, September 17, 2009 9:54 PM
Subject: What should happen with intermediate resource paths that end with "/"?


So if I have a '@Path("/catalog/")' on my class, and
'@Path("/item/{id}")' on a method of the class, what URL should be
matched by the method?  In my testing, it matches perfectly fine with
"/catalog/item/1".  However, when SoapUI loads the WADL file for this
project, it results in a path like "/catalog//item/1", which fails in my
service, of course.  When I then removed the trailing slashes from my
annotations and reran the test with SoapUI, it worked fine.

So, does JAX-RS specifically disallow trailing slashes, or does it
specify that tools should remove consecutive slashes when building URLs?