> -----Original Message----- > From: Sergey Beryozkin [mailto:[email protected]] > Sent: Wednesday, April 27, 2011 8:26 AM > To: [email protected] > Subject: Re: How to append file extent to end of path, before query > parameters? > > Hi > > >> The following should work then : > >> > >> .path(getMethodMap().get("getStuff") + buildFileExtent()); > > > > Hmm, that produced a different problem. > > > > The first line in the old code looks something like this: > > > > UriBuilder builder = > > > getUriInfo().getBaseUriBuilder().path(getClass()).path(getMethodMap(). > get("stuff")); > > > > With the old code, after the initial construction of the Builder, the > "paths" list in the debugger view showed approximately this: > > > > [stuff, {productId}, {zip}] > > > > After putting in arguments (appending the extent manually to the > zip), I ended up with approximately this: > > > > http://localhost:9000/service/rest/junk/stuff/1/98077.en- > us.json?somearg=value > > > > This is fine, except for the inconvenience of how I have to add the > extent. > > > > I then followed your suggestion and changed the first line to this > (removing "buildFileExtent()" from the later code to add the > arguments): > > > > UriBuilder builder = > getUriInfo().getBaseUriBuilder().path(getClass()).path(getMethodMap().g > et("stuff") + buildFileExtent()); > > > > After this line, instead of the previous array value, the "paths" > list was now this: > > > > [public mypackage.GetStuffResponse > mypackage.Controller.getStuff(java.lang.String,java.lang.String,boolean > ,java.lang.String).en-us.json] > > > > So, it's obvious that just appending a string to the end of a method > signature string confuses the "path()" method. I'm guessing it used > that signature to get the "@Path" annotation somehow, so when the > signature was corrupted, it couldn't find it, so it punted. > > > > I guess this is because getMethodMap().get("stuff") returns a Method > reference. May be you can cache @Path values, you can get them from > Method or Class like this : > > method.getAnnotation(Path.class).value()
I don't get what I would do with that. It seems to me UriBuilder is just missing the functionality to be able to do this cleanly. I'd say the following would be useful: * Direct access to the computed path segments (which is already available in UriBuilderImpl), so I could just append to the last one * A "appendToComputedPath(String)" (or something like that) method.
