I have a situation where I'd like a @PathParam to be optional.  For example
I'd like for the path /{tenant}/resource/{id} to be matched for both
.../myTenant/resource/12345 and .../resource/12345, the second case passing
in null for the tenant @PathParam.

I did some research and it seemed like using a regex in my @Path would do
the trick, but I've been unable to get it to work.  And in one case, I'm
getting behavior that seems to be a bug?

Here is what I've done:

    @GET
    @Path("/{tenant : [^/]*}/resource/{id}")
    @Produces({MediaType.APPLICATION_JSON})
    public Response getResource(@PathParam("tenant") String tenant,
@PathParam("id") String id) {
...
    }

When I use the above with a URI .../t1/resource/12345 I get tenant=t1 and
id=12345 as expected, so all is well.

If I use .../resource/12345 I get a "No operation matching request path" in
my log.

If I use ...//resource/12345 I oddly get tenant=12345 and id=null.

It is this last case that seems odd, even if my regex in @Path isn't fully
correct, I'd still expect tenant=null and id=12345 in this case.  So is
this a bug?  Or is there an explanation for it?

But more importantly, is there a regex I can use to have tenant=null when I
use .../resource/12345 and tenant=t1 when I use .../t1/resource/12345?

FWIW, if I try this @Path:

@Path("/{tenant : ([^/]*)?}/resource/{id}")

I get tenant=t1 and id=t1 which also doesn't seem right.  Another bug?

I'm using CXF as part of Camel 2.15.1 running in Karaf 3.0.x.

Thanks,

Kevin

Reply via email to