1 Reply Latest reply on Nov 28, 2005 10:44 PM by starksm64

    SchemaLocation parsing.

      There are a couple of "bugs" in the schema location parsing
      if the attribute does not contain the expected tokens:

       public static String getSchemaLocation(Attributes attrs, String nsUri)
       {
       String location = null;
       String schemaLocation = attrs.getValue(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "schemaLocation");
       if(schemaLocation != null)
       {
       StringTokenizer tokenizer = new StringTokenizer(schemaLocation, " \t\n\r");
       String ns = tokenizer.nextToken();
       while(ns != null)
       {
       location = tokenizer.nextToken(); // Comment: Oops no next token
       if(ns.equals(nsUri))
       {
       break;
       }
       ns = tokenizer.nextToken();
       }
       }
       // Comment: Returns the last "location" even if the namespace didn't match?
       // Is that intentional?
       return location;
       }
      


      I would implement it like this:
       public static String getSchemaLocation(Attributes attrs, String nsUri)
       {
       String schemaLocation = attrs.getValue(XMLConstants.W3C_XML_SCHEMA_INSTANCE_NS_URI, "schemaLocation");
       if (schemaLocation != null)
       {
       StringTokenizer tokenizer = new StringTokenizer(schemaLocation, " \t\n\r");
       while (tokenizer.hasMoreTokens())
       {
       String namespace = tokenizer.nextToken();
       if (namespace.equals(nsUri) && tokenizer.hasMoreTokens())
       return tokenizer.nextToken();
       }
       }
       return null;
       }