You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by di...@apache.org on 2004/04/03 11:43:19 UTC

cvs commit: ws-axis/java/test/types TestURI.java PackageTests.java

dims        2004/04/03 01:43:19

  Modified:    java/src/org/apache/axis/types URI.java
               java/test/types PackageTests.java
  Added:       java/test/types TestURI.java
  Log:
  Fix for AXIS-814 - URI does not over-ride hashcode()
  reported by Sam Meder
  
  Revision  Changes    Path
  1.6       +40 -23    ws-axis/java/src/org/apache/axis/types/URI.java
  
  Index: URI.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/types/URI.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- URI.java	25 Feb 2004 14:02:47 -0000	1.5
  +++ URI.java	3 Apr 2004 09:43:19 -0000	1.6
  @@ -437,7 +437,7 @@
     private void initialize(URI p_base, String p_uriSpec)
                            throws MalformedURIException {
   	  
  -    String uriSpec = (p_uriSpec != null) ? p_uriSpec.trim() : null;
  +    String uriSpec = p_uriSpec;
       int uriSpecLen = (uriSpec != null) ? uriSpec.length() : 0;
   	
       if (p_base == null && uriSpecLen == 0) {
  @@ -456,28 +456,33 @@
       // Check for scheme, which must be before '/', '?' or '#'. Also handle
       // names with DOS drive letters ('D:'), so 1-character schemes are not
       // allowed.
  -    int colonIdx    = uriSpec.indexOf(':');
  -    int slashIdx    = uriSpec.indexOf('/');
  -    int queryIdx    = uriSpec.indexOf('?');
  -    int fragmentIdx = uriSpec.indexOf('#');
  -
  -    if ((colonIdx < 2) ||
  -        (colonIdx > slashIdx && slashIdx != -1) ||
  -        (colonIdx > queryIdx && queryIdx != -1) ||
  -        (colonIdx > fragmentIdx && fragmentIdx != -1)) {
  -      // A standalone base is a valid URI according to spec
  -      if (colonIdx == 0 || (p_base == null && fragmentIdx != 0)) {
  -        throw new MalformedURIException("No scheme found in URI.");
  -      }
  +    int colonIdx = uriSpec.indexOf(':');
  +    if (colonIdx != -1) {
  +        final int searchFrom = colonIdx - 1;
  +        // search backwards starting from character before ':'.
  +        int slashIdx = uriSpec.lastIndexOf('/', searchFrom);
  +        int queryIdx = uriSpec.lastIndexOf('?', searchFrom);
  +        int fragmentIdx = uriSpec.lastIndexOf('#', searchFrom);
  +       
  +        if (colonIdx < 2 || slashIdx != -1 || 
  +            queryIdx != -1 || fragmentIdx != -1) {
  +            // A standalone base is a valid URI according to spec
  +            if (colonIdx == 0 || (p_base == null && fragmentIdx != 0)) {
  +                throw new MalformedURIException("No scheme found in URI.");
  +            }
  +        }
  +        else {
  +            initializeScheme(uriSpec);
  +            index = m_scheme.length()+1;
  +            
  +            // Neither 'scheme:' or 'scheme:#fragment' are valid URIs.
  +            if (colonIdx == uriSpecLen - 1 || uriSpec.charAt(colonIdx+1) == '#') {
  +            	throw new MalformedURIException("Scheme specific part cannot be empty.");	
  +            }
  +        }
       }
  -    else {
  -      initializeScheme(uriSpec);
  -      index = m_scheme.length()+1;
  -      
  -      // Neither 'scheme:' or 'scheme:#fragment' are valid URIs.
  -      if (colonIdx == uriSpecLen - 1 || uriSpec.charAt(colonIdx+1) == '#') {
  -      	throw new MalformedURIException("Scheme specific part cannot be empty.");	
  -      }
  +    else if (p_base == null && uriSpec.indexOf('#') != 0) {
  +        throw new MalformedURIException("No scheme found in URI.");    
       }
   
       // Two slashes means we may have authority, but definitely means we're either
  @@ -1488,6 +1493,17 @@
       return false;
     }
   
  +    /**
  +     * Returns a hash-code value for this URI.  The hash code is based upon all
  +     * of the URI's components, and satisfies the general contract of the
  +     * {@link java.lang.Object#hashCode() Object.hashCode} method. </p>
  +     *
  +     * @return  A hash-code value for this URI
  +     */
  +    public int hashCode() {
  +        return toString().hashCode();
  +    }
  +    
    /**
     * Get the URI as a string specification. See RFC 2396 Section 5.2.
     *
  @@ -1954,3 +1970,4 @@
       return true;
     }
   }
  +
  
  
  
  1.7       +1 -0      ws-axis/java/test/types/PackageTests.java
  
  Index: PackageTests.java
  ===================================================================
  RCS file: /home/cvs/ws-axis/java/test/types/PackageTests.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- PackageTests.java	25 Feb 2004 14:02:59 -0000	1.6
  +++ PackageTests.java	3 Apr 2004 09:43:19 -0000	1.7
  @@ -54,6 +54,7 @@
           suite.addTestSuite(TestNCName.class);
           suite.addTestSuite(TestNMToken.class);
           suite.addTestSuite(TestDuration.class);
  +        suite.addTestSuite(TestURI.class);
           return suite;
       }
   }
  
  
  
  1.1                  ws-axis/java/test/types/TestURI.java
  
  Index: TestURI.java
  ===================================================================
  /*
   * Copyright 2002-2004 The Apache Software Foundation.
   * 
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   * 
   *      http://www.apache.org/licenses/LICENSE-2.0
   * 
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  
  package test.types;
  
  import junit.framework.TestCase;
  import org.apache.axis.types.URI;
  
  /**
   * Test validation of types.Day
   */
  public class TestURI extends TestCase {
  
      public TestURI(String name) {
          super(name);
      }
  
      /**
       * Bug AXIS-814
       */
      public void testAxis814() throws Exception {
          URI uri1 = new URI("urn:foobar");
          URI uri2 = new URI("urn:foobar");
          assertEquals(uri1,uri2);
          assertEquals(uri1.hashCode(),uri2.hashCode());
      }
  }
  
  
  

Re: cvs commit: ws-axis/java/test/types TestURI.java PackageTests.java

Posted by Davanum Srinivas <di...@yahoo.com>.
forgot to mention that i picked up a few fixes from latest xerces URI.java.

--- dims@apache.org wrote:
> dims        2004/04/03 01:43:19
> 
>   Modified:    java/src/org/apache/axis/types URI.java
>                java/test/types PackageTests.java
>   Added:       java/test/types TestURI.java
>   Log:
>   Fix for AXIS-814 - URI does not over-ride hashcode()
>   reported by Sam Meder
>   
>   Revision  Changes    Path
>   1.6       +40 -23    ws-axis/java/src/org/apache/axis/types/URI.java
>   
>   Index: URI.java
>   ===================================================================
>   RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/types/URI.java,v
>   retrieving revision 1.5
>   retrieving revision 1.6
>   diff -u -r1.5 -r1.6
>   --- URI.java	25 Feb 2004 14:02:47 -0000	1.5
>   +++ URI.java	3 Apr 2004 09:43:19 -0000	1.6
>   @@ -437,7 +437,7 @@
>      private void initialize(URI p_base, String p_uriSpec)
>                             throws MalformedURIException {
>    	  
>   -    String uriSpec = (p_uriSpec != null) ? p_uriSpec.trim() : null;
>   +    String uriSpec = p_uriSpec;
>        int uriSpecLen = (uriSpec != null) ? uriSpec.length() : 0;
>    	
>        if (p_base == null && uriSpecLen == 0) {
>   @@ -456,28 +456,33 @@
>        // Check for scheme, which must be before '/', '?' or '#'. Also handle
>        // names with DOS drive letters ('D:'), so 1-character schemes are not
>        // allowed.
>   -    int colonIdx    = uriSpec.indexOf(':');
>   -    int slashIdx    = uriSpec.indexOf('/');
>   -    int queryIdx    = uriSpec.indexOf('?');
>   -    int fragmentIdx = uriSpec.indexOf('#');
>   -
>   -    if ((colonIdx < 2) ||
>   -        (colonIdx > slashIdx && slashIdx != -1) ||
>   -        (colonIdx > queryIdx && queryIdx != -1) ||
>   -        (colonIdx > fragmentIdx && fragmentIdx != -1)) {
>   -      // A standalone base is a valid URI according to spec
>   -      if (colonIdx == 0 || (p_base == null && fragmentIdx != 0)) {
>   -        throw new MalformedURIException("No scheme found in URI.");
>   -      }
>   +    int colonIdx = uriSpec.indexOf(':');
>   +    if (colonIdx != -1) {
>   +        final int searchFrom = colonIdx - 1;
>   +        // search backwards starting from character before ':'.
>   +        int slashIdx = uriSpec.lastIndexOf('/', searchFrom);
>   +        int queryIdx = uriSpec.lastIndexOf('?', searchFrom);
>   +        int fragmentIdx = uriSpec.lastIndexOf('#', searchFrom);
>   +       
>   +        if (colonIdx < 2 || slashIdx != -1 || 
>   +            queryIdx != -1 || fragmentIdx != -1) {
>   +            // A standalone base is a valid URI according to spec
>   +            if (colonIdx == 0 || (p_base == null && fragmentIdx != 0)) {
>   +                throw new MalformedURIException("No scheme found in URI.");
>   +            }
>   +        }
>   +        else {
>   +            initializeScheme(uriSpec);
>   +            index = m_scheme.length()+1;
>   +            
>   +            // Neither 'scheme:' or 'scheme:#fragment' are valid URIs.
>   +            if (colonIdx == uriSpecLen - 1 || uriSpec.charAt(colonIdx+1) == '#') {
>   +            	throw new MalformedURIException("Scheme specific part cannot be empty.");	
>   +            }
>   +        }
>        }
>   -    else {
>   -      initializeScheme(uriSpec);
>   -      index = m_scheme.length()+1;
>   -      
>   -      // Neither 'scheme:' or 'scheme:#fragment' are valid URIs.
>   -      if (colonIdx == uriSpecLen - 1 || uriSpec.charAt(colonIdx+1) == '#') {
>   -      	throw new MalformedURIException("Scheme specific part cannot be empty.");	
>   -      }
>   +    else if (p_base == null && uriSpec.indexOf('#') != 0) {
>   +        throw new MalformedURIException("No scheme found in URI.");    
>        }
>    
>        // Two slashes means we may have authority, but definitely means we're either
>   @@ -1488,6 +1493,17 @@
>        return false;
>      }
>    
>   +    /**
>   +     * Returns a hash-code value for this URI.  The hash code is based upon all
>   +     * of the URI's components, and satisfies the general contract of the
>   +     * {@link java.lang.Object#hashCode() Object.hashCode} method. </p>
>   +     *
>   +     * @return  A hash-code value for this URI
>   +     */
>   +    public int hashCode() {
>   +        return toString().hashCode();
>   +    }
>   +    
>     /**
>      * Get the URI as a string specification. See RFC 2396 Section 5.2.
>      *
>   @@ -1954,3 +1970,4 @@
>        return true;
>      }
>    }
>   +
>   
>   
>   
>   1.7       +1 -0      ws-axis/java/test/types/PackageTests.java
>   
>   Index: PackageTests.java
>   ===================================================================
>   RCS file: /home/cvs/ws-axis/java/test/types/PackageTests.java,v
>   retrieving revision 1.6
>   retrieving revision 1.7
>   diff -u -r1.6 -r1.7
>   --- PackageTests.java	25 Feb 2004 14:02:59 -0000	1.6
>   +++ PackageTests.java	3 Apr 2004 09:43:19 -0000	1.7
>   @@ -54,6 +54,7 @@
>            suite.addTestSuite(TestNCName.class);
>            suite.addTestSuite(TestNMToken.class);
>            suite.addTestSuite(TestDuration.class);
>   +        suite.addTestSuite(TestURI.class);
>            return suite;
>        }
>    }
>   
>   
>   
>   1.1                  ws-axis/java/test/types/TestURI.java
>   
>   Index: TestURI.java
>   ===================================================================
>   /*
>    * Copyright 2002-2004 The Apache Software Foundation.
>    * 
>    * Licensed under the Apache License, Version 2.0 (the "License");
>    * you may not use this file except in compliance with the License.
>    * You may obtain a copy of the License at
>    * 
>    *      http://www.apache.org/licenses/LICENSE-2.0
>    * 
>    * Unless required by applicable law or agreed to in writing, software
>    * distributed under the License is distributed on an "AS IS" BASIS,
>    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>    * See the License for the specific language governing permissions and
>    * limitations under the License.
>    */
>   
>   package test.types;
>   
>   import junit.framework.TestCase;
>   import org.apache.axis.types.URI;
>   
>   /**
>    * Test validation of types.Day
>    */
>   public class TestURI extends TestCase {
>   
>       public TestURI(String name) {
>           super(name);
>       }
>   
>       /**
>        * Bug AXIS-814
>        */
>       public void testAxis814() throws Exception {
>           URI uri1 = new URI("urn:foobar");
>           URI uri2 = new URI("urn:foobar");
>           assertEquals(uri1,uri2);
>           assertEquals(uri1.hashCode(),uri2.hashCode());
>       }
>   }
>   
>   
>   


=====
Davanum Srinivas - http://webservices.apache.org/~dims/

Re: cvs commit: ws-axis/java/test/types TestURI.java PackageTests.java

Posted by Davanum Srinivas <di...@yahoo.com>.
forgot to mention that i picked up a few fixes from latest xerces URI.java.

--- dims@apache.org wrote:
> dims        2004/04/03 01:43:19
> 
>   Modified:    java/src/org/apache/axis/types URI.java
>                java/test/types PackageTests.java
>   Added:       java/test/types TestURI.java
>   Log:
>   Fix for AXIS-814 - URI does not over-ride hashcode()
>   reported by Sam Meder
>   
>   Revision  Changes    Path
>   1.6       +40 -23    ws-axis/java/src/org/apache/axis/types/URI.java
>   
>   Index: URI.java
>   ===================================================================
>   RCS file: /home/cvs/ws-axis/java/src/org/apache/axis/types/URI.java,v
>   retrieving revision 1.5
>   retrieving revision 1.6
>   diff -u -r1.5 -r1.6
>   --- URI.java	25 Feb 2004 14:02:47 -0000	1.5
>   +++ URI.java	3 Apr 2004 09:43:19 -0000	1.6
>   @@ -437,7 +437,7 @@
>      private void initialize(URI p_base, String p_uriSpec)
>                             throws MalformedURIException {
>    	  
>   -    String uriSpec = (p_uriSpec != null) ? p_uriSpec.trim() : null;
>   +    String uriSpec = p_uriSpec;
>        int uriSpecLen = (uriSpec != null) ? uriSpec.length() : 0;
>    	
>        if (p_base == null && uriSpecLen == 0) {
>   @@ -456,28 +456,33 @@
>        // Check for scheme, which must be before '/', '?' or '#'. Also handle
>        // names with DOS drive letters ('D:'), so 1-character schemes are not
>        // allowed.
>   -    int colonIdx    = uriSpec.indexOf(':');
>   -    int slashIdx    = uriSpec.indexOf('/');
>   -    int queryIdx    = uriSpec.indexOf('?');
>   -    int fragmentIdx = uriSpec.indexOf('#');
>   -
>   -    if ((colonIdx < 2) ||
>   -        (colonIdx > slashIdx && slashIdx != -1) ||
>   -        (colonIdx > queryIdx && queryIdx != -1) ||
>   -        (colonIdx > fragmentIdx && fragmentIdx != -1)) {
>   -      // A standalone base is a valid URI according to spec
>   -      if (colonIdx == 0 || (p_base == null && fragmentIdx != 0)) {
>   -        throw new MalformedURIException("No scheme found in URI.");
>   -      }
>   +    int colonIdx = uriSpec.indexOf(':');
>   +    if (colonIdx != -1) {
>   +        final int searchFrom = colonIdx - 1;
>   +        // search backwards starting from character before ':'.
>   +        int slashIdx = uriSpec.lastIndexOf('/', searchFrom);
>   +        int queryIdx = uriSpec.lastIndexOf('?', searchFrom);
>   +        int fragmentIdx = uriSpec.lastIndexOf('#', searchFrom);
>   +       
>   +        if (colonIdx < 2 || slashIdx != -1 || 
>   +            queryIdx != -1 || fragmentIdx != -1) {
>   +            // A standalone base is a valid URI according to spec
>   +            if (colonIdx == 0 || (p_base == null && fragmentIdx != 0)) {
>   +                throw new MalformedURIException("No scheme found in URI.");
>   +            }
>   +        }
>   +        else {
>   +            initializeScheme(uriSpec);
>   +            index = m_scheme.length()+1;
>   +            
>   +            // Neither 'scheme:' or 'scheme:#fragment' are valid URIs.
>   +            if (colonIdx == uriSpecLen - 1 || uriSpec.charAt(colonIdx+1) == '#') {
>   +            	throw new MalformedURIException("Scheme specific part cannot be empty.");	
>   +            }
>   +        }
>        }
>   -    else {
>   -      initializeScheme(uriSpec);
>   -      index = m_scheme.length()+1;
>   -      
>   -      // Neither 'scheme:' or 'scheme:#fragment' are valid URIs.
>   -      if (colonIdx == uriSpecLen - 1 || uriSpec.charAt(colonIdx+1) == '#') {
>   -      	throw new MalformedURIException("Scheme specific part cannot be empty.");	
>   -      }
>   +    else if (p_base == null && uriSpec.indexOf('#') != 0) {
>   +        throw new MalformedURIException("No scheme found in URI.");    
>        }
>    
>        // Two slashes means we may have authority, but definitely means we're either
>   @@ -1488,6 +1493,17 @@
>        return false;
>      }
>    
>   +    /**
>   +     * Returns a hash-code value for this URI.  The hash code is based upon all
>   +     * of the URI's components, and satisfies the general contract of the
>   +     * {@link java.lang.Object#hashCode() Object.hashCode} method. </p>
>   +     *
>   +     * @return  A hash-code value for this URI
>   +     */
>   +    public int hashCode() {
>   +        return toString().hashCode();
>   +    }
>   +    
>     /**
>      * Get the URI as a string specification. See RFC 2396 Section 5.2.
>      *
>   @@ -1954,3 +1970,4 @@
>        return true;
>      }
>    }
>   +
>   
>   
>   
>   1.7       +1 -0      ws-axis/java/test/types/PackageTests.java
>   
>   Index: PackageTests.java
>   ===================================================================
>   RCS file: /home/cvs/ws-axis/java/test/types/PackageTests.java,v
>   retrieving revision 1.6
>   retrieving revision 1.7
>   diff -u -r1.6 -r1.7
>   --- PackageTests.java	25 Feb 2004 14:02:59 -0000	1.6
>   +++ PackageTests.java	3 Apr 2004 09:43:19 -0000	1.7
>   @@ -54,6 +54,7 @@
>            suite.addTestSuite(TestNCName.class);
>            suite.addTestSuite(TestNMToken.class);
>            suite.addTestSuite(TestDuration.class);
>   +        suite.addTestSuite(TestURI.class);
>            return suite;
>        }
>    }
>   
>   
>   
>   1.1                  ws-axis/java/test/types/TestURI.java
>   
>   Index: TestURI.java
>   ===================================================================
>   /*
>    * Copyright 2002-2004 The Apache Software Foundation.
>    * 
>    * Licensed under the Apache License, Version 2.0 (the "License");
>    * you may not use this file except in compliance with the License.
>    * You may obtain a copy of the License at
>    * 
>    *      http://www.apache.org/licenses/LICENSE-2.0
>    * 
>    * Unless required by applicable law or agreed to in writing, software
>    * distributed under the License is distributed on an "AS IS" BASIS,
>    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>    * See the License for the specific language governing permissions and
>    * limitations under the License.
>    */
>   
>   package test.types;
>   
>   import junit.framework.TestCase;
>   import org.apache.axis.types.URI;
>   
>   /**
>    * Test validation of types.Day
>    */
>   public class TestURI extends TestCase {
>   
>       public TestURI(String name) {
>           super(name);
>       }
>   
>       /**
>        * Bug AXIS-814
>        */
>       public void testAxis814() throws Exception {
>           URI uri1 = new URI("urn:foobar");
>           URI uri2 = new URI("urn:foobar");
>           assertEquals(uri1,uri2);
>           assertEquals(uri1.hashCode(),uri2.hashCode());
>       }
>   }
>   
>   
>   


=====
Davanum Srinivas - http://webservices.apache.org/~dims/