diff options
Diffstat (limited to 'libjava')
-rw-r--r-- | libjava/ChangeLog | 6 | ||||
-rw-r--r-- | libjava/java/net/URL.java | 42 |
2 files changed, 31 insertions, 17 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog index 234a0f3..011bae2 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,9 @@ +2004-09-24 Guilhem Lavaux <guilhem@kaffe.org> + + * java/net/URL.java + (set): This method now matches the behaviour of the JDK. + (DEFAULT_SEARCH_PATH): Added "gnu.inet". + 2004-09-24 Guilhem Lavaux <guilhem@kaffe.org> * java/net/URL.java (URL): Delete whitespaces in the protocol string. diff --git a/libjava/java/net/URL.java b/libjava/java/net/URL.java index bc891f4..71e4358 100644 --- a/libjava/java/net/URL.java +++ b/libjava/java/net/URL.java @@ -122,7 +122,7 @@ import java.util.StringTokenizer; public final class URL implements Serializable { private static final String DEFAULT_SEARCH_PATH = - "gnu.java.net.protocol|sun.net.www.protocol"; + "gnu.java.net.protocol|gnu.inet"; /** * The name of the protocol for this URL. @@ -535,6 +535,8 @@ public final class URL implements Serializable */ public String getPath() { + // The spec says we need to return an empty string, but some + // applications depends on receiving null when the path is empty. if (file == null) return null; int quest = file.indexOf('?'); @@ -694,7 +696,8 @@ public final class URL implements Serializable * Sets the specified fields of the URL. This is not a public method so * that only URLStreamHandlers can modify URL fields. This might be called * by the <code>parseURL()</code> method in that class. URLs are otherwise - * constant. + * constant. If the given protocol does not exist, it will keep the previously + * set protocol. * * @param protocol The protocol name for this URL * @param host The hostname or IP address for this URL @@ -705,14 +708,16 @@ public final class URL implements Serializable protected void set(String protocol, String host, int port, String file, String ref) { - // TBD: Theoretically, a poorly written StreamHandler could pass an - // invalid protocol. It will cause the handler to be set to null - // thus overriding a valid handler. Callers of this method should - // be aware of this. - protocol = protocol.toLowerCase (); - if (! this.protocol.equals (protocol)) + URLStreamHandler protocolHandler = null; + protocol = protocol.toLowerCase(); + if (! this.protocol.equals(protocol)) + protocolHandler = getURLStreamHandler(protocol); + + // It is an hidden feature of the JDK. If the protocol does not exist, + // we keep the previously initialized protocol. + if (protocolHandler != null) { - this.ph = getURLStreamHandler(protocol); + this.ph = protocolHandler; this.protocol = protocol; } this.authority = ""; @@ -732,7 +737,8 @@ public final class URL implements Serializable /** * Sets the specified fields of the URL. This is not a public method so * that only URLStreamHandlers can modify URL fields. URLs are otherwise - * constant. + * constant. If the given protocol does not exist, it will keep the previously + * set protocol. * * @param protocol The protocol name for this URL. * @param host The hostname or IP address for this URL. @@ -748,14 +754,16 @@ public final class URL implements Serializable protected void set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref) { - // TBD: Theoretically, a poorly written StreamHandler could pass an - // invalid protocol. It will cause the handler to be set to null - // thus overriding a valid handler. Callers of this method should - // be aware of this. - protocol = protocol.toLowerCase (); - if (! this.protocol.equals (protocol)) + URLStreamHandler protocolHandler = null; + protocol = protocol.toLowerCase(); + if (! this.protocol.equals(protocol)) + protocolHandler = getURLStreamHandler(protocol); + + // It is an hidden feature of the JDK. If the protocol does not exist, + // we keep the previously initialized protocol. + if (protocolHandler != null) { - this.ph = getURLStreamHandler(protocol); + this.ph = protocolHandler; this.protocol = protocol; } this.host = host; |