Author: fanningpj
Date: Sun Jun 21 12:12:13 2026
New Revision: 1935538
Log:
guard colonless value in lexQName error-collecting overload. Thanks to aizu-m.
This closes #66
Modified:
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/XsTypeConverter.java
xmlbeans/trunk/src/test/java/misc/checkin/XsTypeConverterTest.java
Modified:
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/XsTypeConverter.java
==============================================================================
---
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/XsTypeConverter.java
Sun Jun 21 12:10:04 2026 (r1935537)
+++
xmlbeans/trunk/src/main/java/org/apache/xmlbeans/impl/util/XsTypeConverter.java
Sun Jun 21 12:12:13 2026 (r1935538)
@@ -533,7 +533,7 @@ public final class XsTypeConverter {
} catch (InvalidLexicalValueException e) {
errors.add(XmlError.forMessage(e.getMessage()));
final int idx = xsd_qname.indexOf(NAMESPACE_SEP);
- return new QName(null, xsd_qname.substring(idx));
+ return idx < 0 ? new QName(xsd_qname) : new QName(null,
xsd_qname.substring(idx));
}
}
Modified: xmlbeans/trunk/src/test/java/misc/checkin/XsTypeConverterTest.java
==============================================================================
--- xmlbeans/trunk/src/test/java/misc/checkin/XsTypeConverterTest.java Sun Jun
21 12:10:04 2026 (r1935537)
+++ xmlbeans/trunk/src/test/java/misc/checkin/XsTypeConverterTest.java Sun Jun
21 12:12:13 2026 (r1935538)
@@ -281,4 +281,28 @@ public class XsTypeConverterTest {
assertThrows(NumberFormatException.class, () ->
XsTypeConverter.lexInteger("1E5"));
assertThrows(NumberFormatException.class, () ->
XsTypeConverter.lexInteger("1e5"));
}
+
+ @Test
+ void lexQNameCollectsErrorForColonlessInvalidValue() {
+ // The error-collecting overload must record a lexical error and
return a
+ // best-effort QName, never throw. A colon-less value that is not a
valid
+ // NCName ("a b", "") has no ':' so the recovery indexOf returns -1.
+ javax.xml.namespace.NamespaceContext ctx = new
javax.xml.namespace.NamespaceContext() {
+ public String getNamespaceURI(String prefix) { return ""; }
+ public String getPrefix(String uri) { return ""; }
+ public java.util.Iterator<String> getPrefixes(String uri) {
+ return java.util.Collections.<String>emptyList().iterator();
+ }
+ };
+
+ java.util.List<org.apache.xmlbeans.XmlError> errors = new
java.util.ArrayList<>();
+ javax.xml.namespace.QName q = XsTypeConverter.lexQName("a b", errors,
ctx);
+ assertEquals("a b", q.getLocalPart());
+ assertEquals(1, errors.size());
+
+ errors.clear();
+ javax.xml.namespace.QName empty = XsTypeConverter.lexQName("", errors,
ctx);
+ assertEquals("", empty.getLocalPart());
+ assertEquals(1, errors.size());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]