You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by dk...@apache.org on 2019/10/31 14:48:54 UTC
[ws-axiom] 17/25: Correctly support xs:QName values with prefixes
xml and xmlns.
This is an automated email from the ASF dual-hosted git repository.
dkulp pushed a commit to branch datatypes
in repository https://gitbox.apache.org/repos/asf/ws-axiom.git
commit 843e7c5c6909d3a3b694c1a0e1f2c8e37c2c7636
Author: Andreas Veithen <ve...@apache.org>
AuthorDate: Wed Dec 2 23:39:16 2015 +0000
Correctly support xs:QName values with prefixes xml and xmlns.
---
.../apache/axiom/datatype/xsd/XSQNameTypeImpl.java | 14 ++++++++++---
.../axiom/datatype/helper/dom/DOMHelperTest.java | 23 ++++++++++++++++++++++
2 files changed, 34 insertions(+), 3 deletions(-)
diff --git a/datatypes/src/main/java/org/apache/axiom/datatype/xsd/XSQNameTypeImpl.java b/datatypes/src/main/java/org/apache/axiom/datatype/xsd/XSQNameTypeImpl.java
index 3da9d38..a192956 100644
--- a/datatypes/src/main/java/org/apache/axiom/datatype/xsd/XSQNameTypeImpl.java
+++ b/datatypes/src/main/java/org/apache/axiom/datatype/xsd/XSQNameTypeImpl.java
@@ -20,6 +20,7 @@ package org.apache.axiom.datatype.xsd;
import java.text.ParseException;
+import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import org.apache.axiom.datatype.ContextAccessor;
@@ -50,9 +51,16 @@ final class XSQNameTypeImpl implements XSQNameType {
prefix = literal.substring(start, colonIndex);
localPart = literal.substring(colonIndex+1, end);
}
- String namespaceURI = contextAccessor.lookupNamespaceURI(contextObject, options, prefix);
- if (namespaceURI == null) {
- throw new ParseException("Unbound namespace prefix \"" + prefix + "\"", 0);
+ String namespaceURI;
+ if (prefix.equals(XMLConstants.XML_NS_PREFIX)) {
+ namespaceURI = XMLConstants.XML_NS_URI;
+ } else if (prefix.equals(XMLConstants.XMLNS_ATTRIBUTE)) {
+ namespaceURI = XMLConstants.XMLNS_ATTRIBUTE_NS_URI;
+ } else {
+ namespaceURI = contextAccessor.lookupNamespaceURI(contextObject, options, prefix);
+ if (namespaceURI == null) {
+ throw new ParseException("Unbound namespace prefix \"" + prefix + "\"", 0);
+ }
}
return new QName(namespaceURI, localPart, prefix);
}
diff --git a/datatypes/src/test/java/org/apache/axiom/datatype/helper/dom/DOMHelperTest.java b/datatypes/src/test/java/org/apache/axiom/datatype/helper/dom/DOMHelperTest.java
index 00e994d..61311e7 100644
--- a/datatypes/src/test/java/org/apache/axiom/datatype/helper/dom/DOMHelperTest.java
+++ b/datatypes/src/test/java/org/apache/axiom/datatype/helper/dom/DOMHelperTest.java
@@ -22,6 +22,7 @@ import static com.google.common.truth.Truth.assertThat;
import java.text.ParseException;
+import javax.xml.XMLConstants;
import javax.xml.namespace.QName;
import javax.xml.parsers.DocumentBuilderFactory;
@@ -64,4 +65,26 @@ public class DOMHelperTest {
assertThat(qname.getLocalPart()).isEqualTo("value");
assertThat(qname.getPrefix()).isEmpty();
}
+
+ @Test
+ public void testGetQNameFromElementXmlPrefix() throws Exception {
+ Document document = newDocument();
+ Element element = document.createElementNS(null, "test");
+ element.setTextContent("xml:value");
+ QName qname = DOMHelper.getValue(element, XSQNameType.INSTANCE);
+ assertThat(qname.getNamespaceURI()).isEqualTo(XMLConstants.XML_NS_URI);
+ assertThat(qname.getLocalPart()).isEqualTo("value");
+ assertThat(qname.getPrefix()).isEqualTo(XMLConstants.XML_NS_PREFIX);
+ }
+
+ @Test
+ public void testGetQNameFromElementXmlnsPrefix() throws Exception {
+ Document document = newDocument();
+ Element element = document.createElementNS(null, "test");
+ element.setTextContent("xmlns:value");
+ QName qname = DOMHelper.getValue(element, XSQNameType.INSTANCE);
+ assertThat(qname.getNamespaceURI()).isEqualTo(XMLConstants.XMLNS_ATTRIBUTE_NS_URI);
+ assertThat(qname.getLocalPart()).isEqualTo("value");
+ assertThat(qname.getPrefix()).isEqualTo(XMLConstants.XMLNS_ATTRIBUTE);
+ }
}