2004-09-24 Guilhem Lavaux <guilhem@kaffe.org>
authorGuilhem Lavaux <guilhem@kaffe.org>
Fri, 24 Sep 2004 07:35:40 +0000 (07:35 +0000)
committerMichael Koch <mkoch@gcc.gnu.org>
Fri, 24 Sep 2004 07:35:40 +0000 (07:35 +0000)
* java/net/URL.java
(set): This method now matches the behaviour of the JDK.
(DEFAULT_SEARCH_PATH): Added "gnu.inet".

From-SVN: r88016

libjava/ChangeLog
libjava/java/net/URL.java

index 234a0f3bda38cc6cd97eaced09503af9774e66b1..011bae2b973f22398cd3a2580a2fb0e154969fd2 100644 (file)
@@ -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.
index bc891f4534400fffa9ba18b04a776b4b865ccd73..71e43583736ca569c46d4ae7030760a8c5c7521f 100644 (file)
@@ -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;