> Deprecate URL constructors. Developers are encouraged to use `java.net.URI` > to parse or construct any URL. > > The `java.net.URL` class does not itself encode or decode any URL components > according to the escaping mechanism defined in RFC2396. It is the > responsibility of the caller to encode any fields, which need to be escaped > prior to calling URL, and also to decode any escaped fields, that are > returned from URL. > > This has lead to many issues in the past. Indeed, if used improperly, there > is no guarantee that `URL::toString` or `URL::toExternalForm` will lead to a > URL string that can be parsed back into the same URL. This can lead to > constructing misleading URLs. Another issue is with `equals()` and > `hashCode()` which may have to perform a lookup, and do not take > encoding/escaping into account. > > In Java SE 1.4 a new class, `java.net.URI`, has been added to mitigate some > of the shortcoming of `java.net.URL`. Conversion methods to create a URL from > a URI were also added. However, it was left up to the developers to use > `java.net.URI`, or not. This RFE proposes to deprecate all public > constructors of `java.net.URL`, in order to provide a stronger warning about > their potential misuses. To construct a URL, using `URI::toURL` should be > preferred. > > In order to provide an alternative to the constructors that take a stream > handler as parameter, a new factory method `URL::fromURI(java.net.URI, > java.net.URLStreamHandler)` is provided as part of this change. > > Places in the JDK code base that were constructing `java.net.URL` have been > temporarily annotated with `@SuppressWarnings("deprecation")`. Some related > issues will be logged to revisit the calling code. > > The CSR can be reviewed here: https://bugs.openjdk.org/browse/JDK-8295949
Daniel Fuchs has updated the pull request with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains six additional commits since the last revision: - Integrated review feedback - Merge branch 'master' into deprecate-url-ctor-8294241 - Updated after review comments. In particular var tmp => var => _unused - and avoid var in java.xml - Merge branch 'master' into deprecate-url-ctor-8294241 - Fix whitespace issues - 8294241 ------------- Changes: - all: https://git.openjdk.org/jdk/pull/10874/files - new: https://git.openjdk.org/jdk/pull/10874/files/fd4ca287..f6b8a9f9 Webrevs: - full: https://webrevs.openjdk.org/?repo=jdk&pr=10874&range=02 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=10874&range=01-02 Stats: 3893 lines in 203 files changed: 2469 ins; 611 del; 813 mod Patch: https://git.openjdk.org/jdk/pull/10874.diff Fetch: git fetch https://git.openjdk.org/jdk pull/10874/head:pull/10874 PR: https://git.openjdk.org/jdk/pull/10874