Paul Sandoz wrote:
Hi Richard, Michael,

Some clarifications on UriBuilder, URI templates and URI processing in JSR-311.

UriBuilder is primarily concerned about making easy to safely and efficiently build URIs. It was designed to be general in nature rather than scoped to a certain way in JSR-311.

What i said above is slightly misleading of me, i should have said it was *mostly* designed to be general in nature as there are 4 methods associated with accessing URI templates of a class or method, but it is simple to generalize by removing such methods.

Paul.

If it is at all specific it is focused on the use-cases for building and using URIs for RESTful Web applications. For example, given an instance of a java.net.URI how can one easily and safely append one or more path segments to the path component of that instance, or add query parameters and values to the query component of that instance, to create a new URI?

A UriBuilder can be created from an existing java.net.URI instance and then the URI components can be replaced and/or augmented (but not retrieved). URI templates are just one aspect of building URIs and a UriBuilder can be used effectively without leveraging templates (many of the examples provided in the Jersey, the RI, distribution do just that).

URI templates are specified in an internet draft [1], i don't know when/if it will become an RFC. I would not go as far to say they are "ad hoc", which my understanding implies a particular case, as URI templates are fairly general and useful so i would not discount them too early in the discussion process.

JSR-311 also provides access to the query parameters, path segments, and matrix parameters of path segments present in a URI [2].

I understood the CCC request to consider alignment as something larger in scope to improve both URI building and URI parsing/building of URI components.

JSR-311 will have to provide it's own URI-based classes but it would be good if we could align and improve the design in JSR-311 and JDK7.

Paul.

[1] http://www.ietf.org/internet-drafts/draft-gregorio-uritemplate-01.txt
[2] https://jsr311.dev.java.net/nonav/javadoc/javax/ws/rs/core/UriInfo.html

Richard Kennard wrote:
Michael (Paul? Marc?),

Looking at the JSR311 URIBuilder, and with respect to Mark (Reinhold)'s concerns, I actually don't think there is much of an overlap between them. Specifically:

1) javax.ws.rs.core.UriBuilder seems primarily concerned with building URIs by leveraging UriTemplates 2) java.net.UrlEncodedQueryString seems primarily concerned with modelling a query string

While 1) is useful for building URIs in a JSR311-specific way, 2) is useful for parsing and retrieving and modifying query parameters (eg. not solely a builder)

So while an implementation of JSR311 may want to use java.net.UrlEncodedQueryString internally, I don't see how the two classes could effectively merge, because UriBuilder isn't concerned with parsing and retrieving and modifying, and UrlEncodedQueryString isn't concerned with UriTemplates.

Regards,

Richard.

Michael McMahon wrote:
We have been asked by the CCC to go back and reconsider the design of the proposed UrlEncodedQueryString class/API and to consider aligning it with the URIBuilder class that has been proposed in JSR311. Also, the particular concern expressed by the CCC
is that we possibly restricted the scope of the class too much.

What I think we would like to achieve (for Java SE) is a general purpose URI builder that is not
specifically tied to any particular type of web application.

When Richard initially proposed the UrlEncodedQueryString, it was more like a URIBuilder but our concern (which I think is still valid) is that a Java SE class for constructing URIs must be solely based on defined standards (the URI rfcs), rather than on ad-hoc (albeit commonly used) conventions in the world of web applications. Specifically, I don't think we can impose any additional structure on URIs that is not explicitly specified in the relevant URIs. But if other people have a different view on this, I'm interested to discuss it.

A reference for the JSR311 class is at
https://jsr311.dev.java.net/nonav/javadoc/index.html

and Paul Sandoz's blog entry talking about it is at
http://blogs.sun.com/sandoz/entry/building_uris

The javadoc for the proposed UrlEncodedQueryString is attached in a zip file

Thanks,
Michael.




--
| ? + ? = To question
----------------\
   Paul Sandoz
        x38109
+33-4-76188109

Reply via email to