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];