UrlEncodedQueryString CCC request

Marc Hadley Marc.Hadley at Sun.COM
Fri Oct 12 17:25:55 PDT 2007


On Oct 12, 2007, at 6:31 PM, Richard Kennard wrote:
>
> > [UriBuilder has] 4 methods associated with accessing URI  
> templates of a class or method, but it is simple to generalize by  
> removing such methods
>
> This seems a good starting point. If I may propose a logical  
> progression:
>
> 1. We split JSR311's UriBuilder into a JSR311-specific version and  
> a generalized java.net version
>
> 2. We add further generalized methods into the java.net version to  
> cover the other URI segments (scheme, host, port, authority, user- 
> info)
>
The JSR 311 UriBuilder has methods for scheme, host, port and  
userInfo. We did have authority too but removed it since its a  
composite of some of the others.

> 3. We would now have a class that looks not unlike what I was  
> proposing last year. The java.net team's objection to this class  
> (which I agree is valid) was that some methods (queryParam,  
> matrixParam) are not strictly part of the RFC 2396 URI spec. So we  
> may split it again, into a 'strict URI' part and a 'www-form- 
> urlencoded query string' part (which I think is essentially what  
> queryParam and matrixParam are implying)
>
> 4. We agree that parsing and retrieving is also a useful feature  
> and include that (the class can still be called 'builder' -  
> StringBuilder has methods for retrieving, for example)
>
> I think how we do the split in 3) is the most important decision.  
> The java.net team and I tried two ways - a generalized superclass  
> and a specialized subclass, and a standalone class - and preferred  
> the latter, hence where we are with UrlEncodedQueryString today.
>
> What do you think?
>
I think it would make sense for the JSR 311 class to extend a  
generalized java.net class since we'd want to add support for URI  
templates. That support is pervasive so its not just a case of adding  
new methods, we'd want to override existing ones to allow URI  
templates to be used within their values.

Regards,
Marc.

>>
>>> 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.
>>>>
>>>>
>>>
>>
>
>
> -- 
> Richard Kennard | Principal | Kennard Consulting
> 0402 629 952
> http://www.kennardconsulting.com
>

---
Marc Hadley <marc.hadley at sun.com>
CTO Office, Sun Microsystems.





More information about the net-dev mailing list