Author: mukulg
Date: Tue Jul  5 11:01:24 2011
New Revision: 1142978

URL: http://svn.apache.org/viewvc?rev=1142978&view=rev
Log:
committing a schema 1.1 improvement. it seems that reference to 
"##defaultNamespace" as value of xpathDefaultNamespace, wasn't working properly 
with type alternatives in certain cases. i'm committing few improvements in 
this area.

Modified:
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java?rev=1142978&r1=1142977&r2=1142978&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/traversers/XSDTypeAlternativeTraverser.java
 Tue Jul  5 11:01:24 2011
@@ -215,7 +215,11 @@ class XSDTypeAlternativeTraverser extend
         typeAlternative.setBaseURI(fXsdHandler.getDocumentURI());
 
         if (xpathDefaultNS == null) {
-            xpathDefaultNS = schemaDoc.fXpathDefaultNamespace;   
+            xpathDefaultNS = schemaDoc.fXpathDefaultNamespace;
+            if (xpathDefaultNS == null) {
+                // try to find value of xpathDefaultNamespace by resolving 
'##defaultNamespace'
+                xpathDefaultNS = XSTypeHelper.getDefaultNamespace(altElement, 
schemaDoc.fSchemaElement);
+            }            
         }
         if (xpathDefaultNS != null) {
             //set the xpathDefaultNamespace attribute value

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java?rev=1142978&r1=1142977&r2=1142978&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/util/XSTypeHelper.java
 Tue Jul  5 11:01:24 2011
@@ -32,6 +32,7 @@ import org.apache.xerces.impl.validation
 import org.apache.xerces.impl.xs.SchemaSymbols;
 import org.apache.xerces.impl.xs.XSComplexTypeDecl;
 import org.apache.xerces.impl.xs.XSMessageFormatter;
+import org.apache.xerces.util.DOMUtil;
 import org.apache.xerces.util.XMLChar;
 import org.apache.xerces.xni.NamespaceContext;
 import org.apache.xerces.xs.XSComplexTypeDefinition;
@@ -42,6 +43,7 @@ import org.apache.xerces.xs.XSTypeDefini
 import org.eclipse.wst.xml.xpath2.processor.ResultSequence;
 import org.eclipse.wst.xml.xpath2.processor.ResultSequenceFactory;
 import org.eclipse.wst.xml.xpath2.processor.internal.types.AnyType;
+import org.w3c.dom.Element;
 
 /**
  * Class defining utility/helper methods related to XML schema types.
@@ -292,4 +294,30 @@ public class XSTypeHelper {
         
     } // getXPath2ResultSequence
     
+    
+    /*
+     * Resolve the reference '##defaultNamespace' (currently used for "type 
alternative" component).
+     */
+    public static String getDefaultNamespace(Element localElement, Element 
schemaElement) {
+        
+        String defaultNamespace = null;
+        
+        if (DOMUtil.getAttr(localElement, SchemaSymbols.ATT_XPATH_DEFAULT_NS) 
!= null) {
+            defaultNamespace = XMLChar.trim(DOMUtil.getAttrValue(localElement, 
SchemaSymbols.ATT_XPATH_DEFAULT_NS));            
+            if 
(SchemaSymbols.ATTVAL_TWOPOUNDDEFAULTNS.equals(defaultNamespace)) {             
    
+                defaultNamespace = DOMUtil.getDefaultNamespace(localElement);
+            }
+        }
+        else if (DOMUtil.getAttr(schemaElement, 
SchemaSymbols.ATT_XPATH_DEFAULT_NS) != null) {
+            defaultNamespace = 
XMLChar.trim(DOMUtil.getAttrValue(schemaElement, 
SchemaSymbols.ATT_XPATH_DEFAULT_NS));
+            if 
(SchemaSymbols.ATTVAL_TWOPOUNDDEFAULTNS.equals(defaultNamespace)) {             
    
+                defaultNamespace = DOMUtil.getDefaultNamespace(localElement);
+            }
+        }
+        
+        return defaultNamespace;
+        
+    } // getDefaultNamespace
+    
+    
 } // class XSTypeHelper

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java?rev=1142978&r1=1142977&r2=1142978&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java 
(original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/util/DOMUtil.java 
Tue Jul  5 11:01:24 2011
@@ -19,6 +19,8 @@ package org.apache.xerces.util;
 
 import java.util.Hashtable;
 
+import javax.xml.XMLConstants;
+
 import org.apache.xerces.dom.AttrImpl;
 import org.apache.xerces.dom.DocumentImpl;
 import org.apache.xerces.impl.xs.opti.ElementImpl;
@@ -822,6 +824,24 @@ public class DOMUtil {
         return node.getNamespaceURI();
     }
     
+    // find value of "default namespace" for an element node. does a recursive 
search
+    // up the DOM tree as needed, to find the appropriate in-scope "default 
namespace".
+    public static String getDefaultNamespace(Element element) {
+        
+        String defaultNamespace = null;
+        
+        if (getAttr(element, XMLConstants.XMLNS_ATTRIBUTE) != null) {
+            defaultNamespace = XMLChar.trim(getAttrValue(element, 
XMLConstants.XMLNS_ATTRIBUTE)); 
+        }
+        
+        if (defaultNamespace == null && (element.getParentNode() instanceof 
Element)) {
+            defaultNamespace = 
getDefaultNamespace((Element)element.getParentNode());  
+        }
+        
+        return defaultNamespace;
+        
+    } // getDefaultNamespace
+    
     // return annotation
     public static String getAnnotation(Node node) {
         if (node instanceof ElementImpl) {



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@xerces.apache.org
For additional commands, e-mail: commits-h...@xerces.apache.org

Reply via email to