I thought the problem was that you were concatenating a String representation of Method with the extension value. What happens when you pass a Method reference to UriBuilder is that internally a @Path annotation and its value is checked. So I thought this is what you could yourself, cache @Path values instead of Method refs and concatenate them with the extensions
Cheers, Sergey On Wed, Apr 27, 2011 at 4:32 PM, KARR, DAVID (ATTSI) <[email protected]> wrote: >> -----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. >
