RFR: 8051627: Invariants about java.net.URI resolve and relativize are wrong

Daniel Fuchs dfuchs at openjdk.org
Thu Aug 11 14:37:30 UTC 2022


On Thu, 28 Jul 2022 06:48:56 GMT, KIRIYAMA Takuya <duke at openjdk.org> wrote:

> The current documentation of URI class describes relationship between resolve and relativize methods as follows.
> 
> 
> For any two normalized URIs u and v,
>     u.relativize(u.resolve(v)).equals(v) and
>     u.resolve(u.relativize(v)).equals(v) .
> 
> 
> However, there are some cases where this relationship is not true. For example, when u and v are "http://a/b" and "c/d", respectively, both u.relativize(u.resolve(v)) and u.resolve(u.relativize(v)) equal to "http://a/c/d" not "c/d". The documentation should be updated to avoid confusion by describing the relationship between resolve nd relativize methods under certain conditions of the URI. Note that these conditions are sufficient but not necessary for the statement.

I believe you are correct. Could you update the UriTest with some examples and counter-examples to validate this claim?

src/java.base/share/classes/java/net/URI.java line 225:

> 223:  * Let <i>u</i> be any normalized absolute URI ending with a slash character ({@code '/'})
> 224:  * and <i>v</i> be any normalized relative URI not beginning with a period character ({@code '.'})
> 225:  * or slash character ({@code '/'}). Then, the following statement is true.

A colon ':' may be more appropriate than a period '.' at the end of this sentence:
I'd suggest:
> Then, the following statement is true:

src/java.base/share/classes/java/net/URI.java line 232:

> 230:  *
> 231:  * Let <i>u</i> be any normalized absolute URI ending with a slash character ({@code '/'})
> 232:  * and <i>v</i> be any normalized absolute URI. Then, the following statement is true.

Same remark here.

-------------

Changes requested by dfuchs (Reviewer).

PR: https://git.openjdk.org/jdk/pull/9671


More information about the net-dev mailing list