8042889: (props) Properties.loadFromXML/storeToXML should consistently use the UKit parser

huizhe wang huizhe.wang at oracle.com
Mon May 12 19:22:06 UTC 2014


Hi Alan,

The webrev looks good to me.

On 5/12/2014 11:02 AM, Alan Bateman wrote:
>
> In JDK 8 we brought in a tiny XML parser to support the Properties 
> loadFromXML/storeToXML methods. We needed this for the Compact 
> Profiles work, specifically builds of compact1 as they do not have 
> JAXP/XML APIs.
>
> At the time we were a bit nervous about switching the XML parser for 
> anything other than compact1 builds. One reason for this was that the 
> original javadoc didn't constrain the encodings that has to be 
> supported, another reason was confidence in the tests as we didn't 
> have too many tests for these methods in the jdk repository.

Yes, there may be a compatibility concern in case an application 
attempts to read a Properties file previously saved with a different 
encoding.

>
> I'd like to revisit one and switch over the implementation to always 
> use the small parser. This allows for some clean-up, specifically it 
> removes the need for the JDK-internal service type that was needed to 
> use the JAXP code. On the original concerns then the spec was 
> clarified in 8 to only require UTF-8 and UTF-16. In addition there 
> were several tests added to better exercise these methods and the 
> implementation. Also I think switching this early in JDK 9 means that 
> we maximize the time to hear about any issues.

Would you think the wordings in the javadoc of Properties could be 
stronger in terms of encoding, e.g. instead of:
The |loadFromXML(InputStream)| 
<http://docs.oracle.com/javase/8/docs/api/java/util/Properties.html#loadFromXML-java.io.InputStream->and 
|storeToXML(OutputStream, String, String)| 
<http://docs.oracle.com/javase/8/docs/api/java/util/Properties.html#storeToXML-java.io.OutputStream-java.lang.String-java.lang.String->methods 
load and store properties in a simple XML format. By default the UTF-8 
character encoding is used, however a specific encoding may be specified 
if required. Implementations are required to support UTF-8 and UTF-16 
and may support other encodings.

change it to:
The |loadFromXML(InputStream)| 
<http://docs.oracle.com/javase/8/docs/api/java/util/Properties.html#loadFromXML-java.io.InputStream-> 
and |storeToXML(OutputStream, String, String)| 
<http://docs.oracle.com/javase/8/docs/api/java/util/Properties.html#storeToXML-java.io.OutputStream-java.lang.String-java.lang.String-> 
methods load and store properties in a simple XML format. The default 
character encoding is UTF-8 which is the recommended encoding for all 
Properties files in XML format. Applications should use UTF-8 to avoid 
potential encoding errors. Implementations are required to support UTF-8 
and UTF-16.


XML specification requires processors to support both UTF-8 and 16. But 
UTF-8 is the dominant encoding for XML files. The above suggestion is 
"stronger" in terms of using UTF-8, but not as strong as for example, 
Google's Sitemap service that was straight forward in their requirement: 
"We require your Sitemap file to be UTF-8 encoded".

-Joe

>
> The webrev with the proposed changes is here, mostly red=removal so 
> easy to review:
>
> http://cr.openjdk.java.net/~alanb/8042889/webrev/
>
> -Alan.




More information about the core-libs-dev mailing list