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);
+    }
 }