tomj        02/02/13 07:39:57

  Modified:    java/test/utils TestJavaUtils.java
               java/src/org/apache/axis/utils JavaUtils.java
  Log:
  Patch from Dave Dunkin [[EMAIL PROTECTED]] :
  
  The following patch fixes a few cases that aren't mapped correctly:
  An identifier where the first character is a mark (e.g. "\u2160foo" maps
  to "\u2160Foo").
  An identifier where the first character is a valid Java identifier
  start, but is puctuation (e.g. "_foo" maps to "foo").
  
  It also handles identifiers that don't contain any characters that are
  valid in Java identifiers (e.g. "-").
  
  Revision  Changes    Path
  1.2       +5 -2      xml-axis/java/test/utils/TestJavaUtils.java
  
  Index: TestJavaUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/test/utils/TestJavaUtils.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- TestJavaUtils.java        12 Feb 2002 21:04:01 -0000      1.1
  +++ TestJavaUtils.java        13 Feb 2002 15:39:57 -0000      1.2
  @@ -29,8 +29,9 @@
                   JavaUtils.xmlNameToJava("other_punct\u00B7chars"));
           assertEquals("answer42", JavaUtils.xmlNameToJava("Answer42"));
   
  -        assertEquals("\u2160foo", JavaUtils.xmlNameToJava("\u2160foo"));
  +        assertEquals("\u2160Foo", JavaUtils.xmlNameToJava("\u2160foo"));
           assertEquals("foo", JavaUtils.xmlNameToJava("2foo"));
  +        assertEquals("foo", JavaUtils.xmlNameToJava("_foo_"));
           assertEquals("foobar", JavaUtils.xmlNameToJava("--foobar--"));
   
           assertEquals("foo22Bar", JavaUtils.xmlNameToJava("foo22bar"));
  @@ -47,6 +48,8 @@
           assertEquals("fOOBar", JavaUtils.xmlNameToJava("FOOBar"));
   
           // the following cases are ambiguous in JSR-101
  -        assertEquals("fooBar", JavaUtils.xmlNameToJava("foo bar"), "fooBar");
  +        assertEquals("fooBar", JavaUtils.xmlNameToJava("foo bar"));
  +        assertEquals("_1", JavaUtils.xmlNameToJava("-"));
  +        assertEquals("__", JavaUtils.xmlNameToJava("_"));
       }
   }
  
  
  
  1.30      +15 -3     xml-axis/java/src/org/apache/axis/utils/JavaUtils.java
  
  Index: JavaUtils.java
  ===================================================================
  RCS file: /home/cvs/xml-axis/java/src/org/apache/axis/utils/JavaUtils.java,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- JavaUtils.java    12 Feb 2002 21:04:01 -0000      1.29
  +++ JavaUtils.java    13 Feb 2002 15:39:57 -0000      1.30
  @@ -423,12 +423,14 @@
           char[] nameArray = name.toCharArray();
           int nameLen = name.length();
           StringBuffer result = new StringBuffer(nameLen);
  +        boolean wordStart = false;
           
           // The mapping indicates to convert first
           // character.
           int i = 0;
           while (i < nameLen
  -                && !Character.isJavaIdentifierStart(nameArray[i])) {
  +                && (isPunctuation(nameArray[i])
  +                || !Character.isJavaIdentifierStart(nameArray[i]))) {
               i++;
           }
           if (i < nameLen) {
  @@ -442,9 +444,20 @@
               else {
                   result.append(nameArray[i]);
               }
  +            wordStart = !Character.isLetter(nameArray[i]);
           }
           else {
  -            result.append("_" + nameArray[0]);
  +            // The identifier cannot be mapped strictly according to
  +            // JSR 101
  +            if (Character.isJavaIdentifierPart(nameArray[0])) {
  +                result.append("_" + nameArray[0]);
  +            }
  +            else {
  +                // The XML identifier does not contain any characters
  +                // we can map to Java.  Using the length of the string
  +                // will make it somewhat unique.
  +                result.append("_" + nameArray.length);
  +            }
           }
           
           // The mapping indicates to skip over
  @@ -452,7 +465,6 @@
           // digits.  The first letter/digit 
           // following a skipped character is 
           // upper-cased.
  -        boolean wordStart = false;
           for (++i; i < nameLen; ++i) {
               char c = nameArray[i];
   
  
  
  


Reply via email to