[jsr339-experts] Re: UriTemplate API?

From: Bill Burke <bburke_at_redhat.com>
Date: Thu, 21 Feb 2013 09:08:12 -0500

On 2/20/2013 12:08 PM, Marek Potociar wrote:
> Hello experts,
> Please review the issue that has been recently filed:
> http://java.net/jira/browse/JAX_RS_SPEC-359
> In summary the user wants to be able take a URI template, e.g.
> "http://example.com/name/{name}/age/{age}" and then take a URI, e.g.
> "http://example.com/name/Arnold/age/65" (guess who...) and extract the
> parameter values information into a Map<String, String> instance.
> The solution may look like:
> UriBuilder builder
> = UriBuilder.fromUri("http://example.com/name/{name}/age/{age}");
> UriTemplate template = builder.template();
> Map<String, String> params = new HashMap<String, String>();
> if (template.match("http://example.com/name/Arnold/age/65", params)) {
> params.put("name", "Alois");
> URI uri = builder.buildFromMap(params);
> ...
> }
> The above requires following API changes:
> * introduce UriTemplate to represent, well, URI templates...
> * add ability to get UriTemplate instances from UriBuilder and WebTarget
> * expose the boolean UriTemplate.match(URI, Map<String,
> String>) method as part of the UriTemplate API.
> Now, finally, my question is:
> Q1. Do you think the above API would be useful?
> Q2. Is it something we should still try to add into JAX-RS 2.0, given
> where we are?

I'd say extend UriBuilder with a match() method instead of adding yet
another class we have to include within RuntimeDelegate. Something like:

Map<String, String> match(String URI);

match() returns null if it can't match the current expression with the
passed in URI.

Useful. Yes. Include in JAX-RS 2.0? Well... I don't get it...you've
deferred some pretty trivial improvements that I've submitted and in
some cases important JIRAs like:


But you want to include a brand new feature? Plus complain everytime I
make a suggestion that we're too close to the PFD? A bit hypocritical
don't you think?

Bill Burke
JBoss, a division of Red Hat