RFR: 8294241: Deprecate URL public constructors [v5]
Daniel Fuchs
dfuchs at openjdk.org
Thu Nov 3 15:52:53 UTC 2022
> 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 10 additional commits since the last revision:
- Merge branch 'master' into deprecate-url-ctor-8294241
- Update src/java.base/share/classes/java/net/URL.java
Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>
- Update src/java.base/share/classes/java/net/URL.java
Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>
- Update src/java.base/share/classes/java/net/URL.java
Co-authored-by: ExE Boss <3889017+ExE-Boss at users.noreply.github.com>
- 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/fc899005..b4a73f40
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=10874&range=04
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=10874&range=03-04
Stats: 42853 lines in 291 files changed: 10793 ins; 30812 del; 1248 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
More information about the serviceability-dev
mailing list