+1. As the author of a library that uses the URI class, I need control over how it is behaving, and I cannot assume that other libraries in the same VM want the same options as I do.
Michael Kay Saxonica m...@saxonica.com +44 (0118) 946 5893 On 9 Jul 2014, at 12:10, Alan Bateman <alan.bate...@oracle.com> wrote: > On 09/07/2014 11:38, Peter Firmstone wrote: >> I've had some time to think about how to make java.net.URI comply with >> RFC3986 as well as retain the existing implementation for backward >> compatibility: >> >> 1. Strip out the existing URI class and Parser, create an abstract >> private delegate, move URI's implementation into a concrete >> delegate. Create a new delgate for RFC3986. >> 2. Use a system property to determine whether URI uses the existing >> implementation or RFC3986. >> 3. Retain existing Serial form, represented by a String. >> 4. Use one transient volatile field to refer to the delgate, remove >> all other fields from the encapsulating URI class, the delegates >> are not Serializable. Alternatively we may make all fields final >> by reworking Serializable code to ensure only the String field is >> written and read from the stream and by updating the delegate >> final field reference during deserialization. >> 5. Make the delegate implementations final and immutable, don't >> lazily initialize. >> 6. All methods refer to the delegate, the implementation of which is >> determined by the system property and instantiated at construction >> and during deserialization. > The OpenJDK net-dev list would be the best to start a new thread on this. > > At a high-level then I don't think system-wide configuration (#2) to toggle > between RFC 2396 and 3986 is really feasible, particularly when you have an > application that is built from libraries coming from many places. Also what > would this mean for specification, particularly opaque URIs and specification > dealing with the scheme specific part. Also think testing, is an > implementation required to support both and does it mean running tests with > both settings? > > For the discussion on net-dev then I think it would be good to get into the > major differences between the two RFCs and also the history and the previous > attempt to rev java.net.URI. There have been a number of suggestions since > then on what APIs might need to be added. My gut feel is that the overall > effort is not going to be trivial and will likely need a JEP. > > -Alan >