hadoop-common-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Simon Scott (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HADOOP-14157) FsUrlStreamHandlerFactory "Illegal character in path" parsing file URL on Windows
Date Wed, 08 Mar 2017 14:59:38 GMT

    [ https://issues.apache.org/jira/browse/HADOOP-14157?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15901380#comment-15901380

Simon Scott commented on HADOOP-14157:

I have debugged this issue and believe I have a good understanding of the cause.

I believe that registering the {{FsUrlStreamHandlerFactory}} causes it to create an {{FsUrlStreamHandler}}
instance for use by "file" scheme URLs. So it has effectively replaced the usual {{sun.net.www.protocol.file.Handler}}.

When called upon to parse a string into a URL, the {{sun.net.www.protocol.file.Handler}} overrides
{{parseURL}} in order to replace any {{File.separatorChar}} with '/', before calling the {{super.parseURL}}.

The {{FsUrlStreamHandler}} does not include this override. So on Windows, backslashes can
be passed through untranslated and so we have an invalid URL.

> FsUrlStreamHandlerFactory "Illegal character in path" parsing file URL on Windows
> ---------------------------------------------------------------------------------
>                 Key: HADOOP-14157
>                 URL: https://issues.apache.org/jira/browse/HADOOP-14157
>             Project: Hadoop Common
>          Issue Type: Bug
>          Components: fs
>    Affects Versions: 2.7.3, 2.6.5, 3.0.0-alpha2
>         Environment: Windows
>            Reporter: Simon Scott
>            Priority: Minor
> After registering the FsUrlStreamHandlerFactory with the JVM, subsequent calls to convert
a "file" URL to a URI can fail with "Illegal character in path" where the illegal character
is a backslash.
> For example:
> {code}
> URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
> File file = new File("C:/Users");
> final URL url = new URL("file:///" + file.getAbsolutePath());
> {code}
> gives stack trace:
> {noformat}
> java.net.URISyntaxException: Illegal character in path at index 8: file:/C:\Users
>     at java.net.URI$Parser.fail(URI.java:2848)
>     at java.net.URI$Parser.checkChars(URI.java:3021)
>     at java.net.URI$Parser.parseHierarchical(URI.java:3105)
>     at java.net.URI$Parser.parse(URI.java:3053)
>     at java.net.URI.<init>(URI.java:588)
>     at java.net.URL.toURI(URL.java:946)
> {noformat}

This message was sent by Atlassian JIRA

To unsubscribe, e-mail: common-issues-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-issues-help@hadoop.apache.org

View raw message