new URI("http://example.com/foo#bar").resolve("")
Jack Bates
jack.bates at gmail.com
Mon Jan 25 15:51:36 PST 2010
Hi Michael,
On Mon, 2010-01-25 at 11:20 +0000, Michael McMahon wrote:
> I don't think this is a bug. Everything to the
> right of the final "/" in the original URI is discarded when resolving
> against any relative URI.
I think you're referring to step 6a) in RFC2396 section 5.2,
a) All but the last segment of the base URI's path component is
copied to the buffer. In other words, any characters after the
last (right-most) slash character, if any, are excluded.
- however step 2) is,
2) If the path component is empty and the scheme, authority, and
query components are undefined, then it is a reference to the
current document and we are done. Otherwise, the reference URI's
query and fragment components are defined as found (or not found)
within the URI reference and not inherited from the base URI.
In my example the path component is empty and the scheme, authority, and
query components are undefined, which is why I expect it to return,
"http://example.com/foo"
There's also an example in appendix C.2,
An empty reference refers to the start of the current document.
<> = (current document)
RFC3986 section 5.4.1 gives some more examples,
Within a representation with a well defined base URI of
http://a/b/c/d;p?q
a relative reference is transformed to its target URI as follows.
[...]
"" = "http://a/b/c/d;p?q"
- however when I run,
import java.net.URI;
public class Test
{
public static void main(String[] args) throws Exception
{
System.out.println(new URI("http://a/b/c/d;p?q").resolve(""));
}
}
- instead of "http://a/b/c/d;p?q", it outputs,
$ java Test
http://a/b/c/
$
RFC3986 section 5.2.2 also includes,
if (R.path == "") then
T.path = Base.path;
> So, "foo#bar" is correctly discarded, leaving the new URI
>
> http://example.com/
>
> That would be my reading of RFC2396 anyway.
>
> - Michael.
>
> Jack Bates wrote:
> > new URI("http://example.com/foo#bar").resolve("")
> >
> > ^ I expect this to return "http://example.com/foo", but when I run,
> >
> > import java.net.URI;
> >
> > public class Test
> > {
> > public static void main(String[] args) throws Exception
> > {
> > System.out.println(new URI("http://example.com/foo#bar").resolve(""));
> > }
> > }
> >
> > - it outputs,
> >
> > $ java Test
> > http://example.com/
> > $
> >
> > Do you think this is a bug?
> >
> > I'm running OpenJDK 6, but I can find only cosmetic differences between
> > URI.java in the version I'm running and URI.java in,
> > http://www.java.net/download/openjdk/jdk7/promoted/b80/openjdk-7-ea-src-b80-21_jan_2010.zip
> >
> > - so I assume the issue (if it is an issue) still exists?
> >
>
>
More information about the net-dev
mailing list