Hi,

Please find attached patch for class XSDAbstractTraverser.

Modified method traverseAttrsAndAttrGrps().

Cheers,
Rahul.

Sun Microsystems, Inc.

XSDAbstractTraverser.java

Index: XSDAbstractTraverser.java
===================================================================
RCS file: 
/home/cvspublic/xml-xerces/java/src/org/apache/xerces/impl/v2/XSDAbstractTraverser.java,v
retrieving revision 1.21
diff -u -w -r1.21 XSDAbstractTraverser.java
--- XSDAbstractTraverser.java   2001/10/02 18:43:03     1.21
+++ XSDAbstractTraverser.java   2001/10/04 08:44:05
@@ -73,6 +73,7 @@
  * a unified way to initialize these data.
  *
  * @author Elena Litani, IBM
+ * @author Rahul Srivastava, Sun Microsystems Inc.
  *
  * @version $Id: XSDAbstractTraverser.java,v 1.21 2001/10/02 18:43:03 neilg Exp $
  */
@@ -182,10 +183,30 @@
                 tempAttrGrp = fSchemaHandler.fAttributeGroupTraverser.traverseLocal(
                               child, schemaDoc, grammar);
                 XSAttributeUse[] attrUseS = tempAttrGrp.getAttributeUses();
+                XSAttributeUse existingAttrUse = null;
                 for (int i=0; i<attrUseS.length; i++) {
+                       existingAttrUse = 
+attrGrp.getAttributeUse(attrUseS[i].fAttrDecl.fTargetNamespace,
+                                                                 
+attrUseS[i].fAttrDecl.fName);
+                       if (existingAttrUse == null) {
                     attrGrp.addAttributeUse(attrUseS[i]);
                 }
+                       //REVISIT: perform union of attribute use.
+                       else {
+                               reportGenericSchemaError("Duplicate attribute found");
             }
+                }
+                
+                if (tempAttrGrp.fAttributeWC != null) {
+                       if (attrGrp.fAttributeWC == null) {
+                               attrGrp.fAttributeWC = tempAttrGrp.fAttributeWC;
+                       }
+                       // perform intersection of attribute wildcard
+                       else {
+                               attrGrp.fAttributeWC = attrGrp.fAttributeWC.
+                                                      
+performIntersectionWith(tempAttrGrp.fAttributeWC);
+                       }
+                }
+            }
             else
                 break;
         } // for
@@ -193,8 +214,16 @@
         if (child != null) {
             childName = child.getLocalName();
             if (childName.equals(SchemaSymbols.ELT_ANYATTRIBUTE)) {
-                XSWildcardDecl tempAttrWC = 
fSchemaHandler.fWildCardTraverser.traverseAnyAttribute(child, schemaDoc, grammar);
+                XSWildcardDecl tempAttrWC = fSchemaHandler.fWildCardTraverser.
+                                           traverseAnyAttribute(child, schemaDoc, 
+grammar);
+                if (attrGrp.fAttributeWC == null) {
                 attrGrp.fAttributeWC = tempAttrWC;
+                }
+                // perform intersection of attribute wildcard
+                else {
+                       attrGrp.fAttributeWC = attrGrp.fAttributeWC.
+                                              performIntersectionWith(tempAttrWC);
+                }
                 child = DOMUtil.getNextSiblingElement(child);
             }
 

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to