Author: knoaman
Date: Fri Sep 16 18:51:45 2011
New Revision: 1171718

URL: http://svn.apache.org/viewvc?rev=1171718&view=rev
Log:
For dynamic EDC, check for local elements in current type as well as the base 
type chain. Jira issue 1535
(https://issues.apache.org/jira/browse/XERCESJ-1535)

Modified:
    
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java

Modified: 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
URL: 
http://svn.apache.org/viewvc/xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java?rev=1171718&r1=1171717&r2=1171718&view=diff
==============================================================================
--- 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
 (original)
+++ 
xerces/java/branches/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/XMLSchemaValidator.java
 Fri Sep 16 18:51:45 2011
@@ -2382,7 +2382,7 @@ public class XMLSchemaValidator
         // EDC rule
         if (isSchema11) {
             if (wildcard != null && fCurrentCM != null) {
-                XSElementDecl elemDecl = 
fCurrentCM.findMatchingElemDecl(element, fSubGroupHandler);
+                XSElementDecl elemDecl = findLocallyDeclaredType(element, 
fCurrentCM, fTypeStack[fElementDepth-1].getBaseType());
                 if (elemDecl != null) {
                     final XSTypeDefinition elemType = 
elemDecl.getTypeDefinition();
                     // types need to be equivalent
@@ -2566,6 +2566,19 @@ public class XMLSchemaValidator
         return augs;
 
     } // handleStartElement(QName,XMLAttributes,boolean)
+
+    private XSElementDecl findLocallyDeclaredType(QName element,
+            XSCMValidator currentCM, XSTypeDefinition baseType) {
+        XSElementDecl elemDecl = currentCM.findMatchingElemDecl(element, 
fSubGroupHandler);
+        if (elemDecl == null) {
+            if (baseType.getTypeCategory() != XSTypeDefinition.SIMPLE_TYPE &&
+                    baseType != SchemaGrammar.getXSAnyType(fSchemaVersion)) {
+                currentCM = ((XSComplexTypeDecl) 
baseType).getContentModel(fCMBuilder);
+                return findLocallyDeclaredType(element, currentCM, 
baseType.getBaseType());
+            }
+        }
+        return elemDecl;
+    }
     
     /*
      * Delegate to assertions validator startElement handler.



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to