Author: amilas
Date: Tue May 22 21:43:54 2007
New Revision: 540838

URL: http://svn.apache.org/viewvc?view=rev&rev=540838
Log:
Adb had some bug compatible code for XmlSchema. Now Xmlschma bug has fixed.
Corrected all the bug compatible code.

Modified:
    
webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java

Modified: 
webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
URL: 
http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java?view=diff&rev=540838&r1=540837&r2=540838
==============================================================================
--- 
webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
 (original)
+++ 
webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/SchemaCompiler.java
 Tue May 22 21:43:54 2007
@@ -40,7 +40,7 @@
  */
 public class SchemaCompiler {
 
-    private static final Log log = LogFactory.getLog(SchemaCompiler .class);
+    private static final Log log = LogFactory.getLog(SchemaCompiler.class);
 
     private CompilerOptions options;
     private HashMap processedTypemap;
@@ -1007,15 +1007,9 @@
 
         QName attributeGroupRefName = attributeGroupRef.getRefName();
         if (attributeGroupRefName != null){
-           XmlSchemaObjectTable xmlSchemaObjectTable = 
parentSchema.getAttributeGroups();
-           XmlSchemaAttributeGroup xmlSchemaAttributeGroup = null;
-           for (Iterator iter = xmlSchemaObjectTable.getValues(); 
iter.hasNext();){
-               xmlSchemaAttributeGroup = (XmlSchemaAttributeGroup) iter.next();
-               if 
(xmlSchemaAttributeGroup.getName().equals(attributeGroupRefName.getLocalPart())){
-                   break;
-               }
-           }
-
+           parentSchema = 
resolveParentSchema(attributeGroupRefName,parentSchema);
+           XmlSchemaAttributeGroup xmlSchemaAttributeGroup = 
getXmlSchemaAttributeGroup(attributeGroupRefName,
+                                                                               
         parentSchema);
            if (xmlSchemaAttributeGroup != null){
                
processAttributes(xmlSchemaAttributeGroup.getAttributes(),metaInfHolder,parentSchema);
            } else {
@@ -1028,6 +1022,39 @@
 
     }
 
+    private XmlSchemaAttributeGroup getXmlSchemaAttributeGroup(QName 
attributeGroupQName,
+                                                               XmlSchema 
parentSchema){
+        XmlSchemaAttributeGroup xmlSchemaAttributeGroup =
+                (XmlSchemaAttributeGroup) 
parentSchema.getAttributeGroups().getItem(attributeGroupQName);
+        if (xmlSchemaAttributeGroup == null){
+            // i.e this attribute can be in a included or imported schema
+            xmlSchemaAttributeGroup = (XmlSchemaAttributeGroup) 
parentSchema.getAttributeGroups().getItem(attributeGroupQName);
+            if (xmlSchemaAttributeGroup == null) {
+                // try to find in an import or an include
+                XmlSchemaObjectCollection includes = 
parentSchema.getIncludes();
+                if (includes != null) {
+                    Iterator includesIter = includes.getIterator();
+                    Object object = null;
+                    while (includesIter.hasNext()) {
+                        object = includesIter.next();
+                        if (object instanceof XmlSchemaImport) {
+                            XmlSchema schema1 = ((XmlSchemaImport) 
object).getSchema();
+                            xmlSchemaAttributeGroup = 
(XmlSchemaAttributeGroup) 
schema1.getAttributeGroups().getItem(attributeGroupQName);
+                        }
+                        if (object instanceof XmlSchemaInclude) {
+                            XmlSchema schema1 = ((XmlSchemaInclude) 
object).getSchema();
+                            xmlSchemaAttributeGroup = 
(XmlSchemaAttributeGroup) 
schema1.getAttributeGroups().getItem(attributeGroupQName);
+                        }
+                        if (xmlSchemaAttributeGroup != null){
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return xmlSchemaAttributeGroup;
+    }
+
     /**
      * Process the content models. A content model is either simple type or a 
complex type
      * and included inside a complex content
@@ -1608,26 +1635,14 @@
 
         } else if (att.getRefName() != null) {
             XmlSchema currentParentSchema = 
resolveParentSchema(att.getRefName(), parentSchema);
-            QName attrQname = att.getRefName();
-
-            XmlSchemaObjectTable xmlSchemaObjectTable = 
currentParentSchema.getAttributes();
-
-            QName currentQName = null;
-            XmlSchemaAttribute xmlSchemaAttribute = null;
-            for (Iterator attributesIter = xmlSchemaObjectTable.getNames(); 
attributesIter.hasNext();) {
-                currentQName = (QName) attributesIter.next();
-                if 
(currentQName.getLocalPart().equals(attrQname.getLocalPart())) {
-                    xmlSchemaAttribute = (XmlSchemaAttribute) 
xmlSchemaObjectTable.getItem(currentQName);
-                    break;
-                }
-            }
+            XmlSchemaAttribute xmlSchemaAttribute = 
getXmlSchemaAttribute(att.getRefName(),currentParentSchema);
 
             if (xmlSchemaAttribute != null) {
                 // call recursively to process the schema
                 processAttribute(xmlSchemaAttribute, metainf, 
currentParentSchema);
             } else {
                 throw new SchemaCompilationException("Attribute QName 
reference refer to an invalid attribute " +
-                        attrQname);
+                        att.getRefName());
             }
 
         } else {
@@ -1682,6 +1697,39 @@
         }
     }
 
+    private XmlSchemaAttribute getXmlSchemaAttribute(QName attributeQName,
+                                                     XmlSchema parentSchema){
+        XmlSchemaAttribute xmlSchemaAttribute =
+                (XmlSchemaAttribute) 
parentSchema.getAttributes().getItem(attributeQName);
+        if (xmlSchemaAttribute == null){
+            // i.e this attribute can be in a included or imported schema
+            xmlSchemaAttribute = (XmlSchemaAttribute) 
parentSchema.getAttributes().getItem(attributeQName);
+            if (xmlSchemaAttribute == null) {
+                // try to find in an import or an include
+                XmlSchemaObjectCollection includes = 
parentSchema.getIncludes();
+                if (includes != null) {
+                    Iterator includesIter = includes.getIterator();
+                    Object object = null;
+                    while (includesIter.hasNext()) {
+                        object = includesIter.next();
+                        if (object instanceof XmlSchemaImport) {
+                            XmlSchema schema1 = ((XmlSchemaImport) 
object).getSchema();
+                            xmlSchemaAttribute = (XmlSchemaAttribute) 
schema1.getAttributes().getItem(attributeQName);
+                        }
+                        if (object instanceof XmlSchemaInclude) {
+                            XmlSchema schema1 = ((XmlSchemaInclude) 
object).getSchema();
+                            xmlSchemaAttribute = (XmlSchemaAttribute) 
schema1.getAttributes().getItem(attributeQName);
+                        }
+                        if (xmlSchemaAttribute != null){
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return xmlSchemaAttribute;
+    }
+
     /**
      * Process a particle- A particle may be a sequence,all or a choice
      * @param parentElementQName - this can either be parent element QName or 
parent Complex type qname
@@ -1698,18 +1746,6 @@
         if (particle instanceof XmlSchemaSequence) {
             XmlSchemaSequence xmlSchemaSequence = (XmlSchemaSequence) particle;
 
-            //remove this : only for testing
-            if (parentElementQName != null) {
-                QName qname = new 
QName("http://mynamespace.com/testparticlemaxoccurs";, "TestCustomType");
-                if (!qname.equals(parentElementQName)) {
-                    if 
(parentElementQName.getNamespaceURI().equals("http://mynamespace.com/testparticlemaxoccurs";))
 {
-                        xmlSchemaSequence.setMaxOccurs(5);
-                        xmlSchemaSequence.setMinOccurs(0);
-                    }
-                }
-            }
-
-
             XmlSchemaObjectCollection items = xmlSchemaSequence.getItems();
             //TODO: support parentElementQName null instances. i.e for 
extensions
             if ((xmlSchemaSequence.getMaxOccurs() > 1) && (parentElementQName 
!= null)) {
@@ -1890,16 +1926,14 @@
                 if (groupQName != null){
                     if (!processedTypemap.containsKey(groupQName)){
                         // processe the schema here
-                        //TODO: get the xmlSchemaGroup correctly when it is in 
another schema.
-                        XmlSchemaObjectTable xmlSchemaObjectTable = 
parentSchema.getGroups();
-                        XmlSchemaGroup xmlSchemaGroup = null;
-                        for (Iterator groupsIter = 
xmlSchemaObjectTable.getValues(); groupsIter.hasNext();){
-                            xmlSchemaGroup = (XmlSchemaGroup) 
groupsIter.next();
-                            if 
(xmlSchemaGroup.getName().equals(groupQName.getLocalPart())){
-                                break;
-                            }
+                        XmlSchema resolvedParentSchema = 
resolveParentSchema(groupQName,parentSchema);
+                        XmlSchemaGroup xmlSchemaGroup = 
getGroup(groupQName,resolvedParentSchema);
+                        if (xmlSchemaGroup != null){
+                            processGroup(xmlSchemaGroup, groupQName, 
parentSchema);
+                        } else {
+                            throw new SchemaCompilationException("Refered 
Group "+ groupQName.getLocalPart() + " can not be found ");
                         }
-                        processGroup(xmlSchemaGroup, groupQName, parentSchema);
+
                     }
 
                     Boolean isArray = xmlSchemaGroupRef.getMaxOccurs() > 1 ? 
Boolean.TRUE : Boolean.FALSE;
@@ -2135,6 +2169,39 @@
 
         //set the ordered flag in the metainf holder
         metainfHolder.setOrdered(order);
+    }
+
+    private XmlSchemaGroup getGroup(QName groupQName,
+                          XmlSchema parentSchema){
+         XmlSchemaGroup xmlSchemaGroup =
+                (XmlSchemaGroup) parentSchema.getGroups().getItem(groupQName);
+        if (xmlSchemaGroup == null){
+            // i.e this attribute can be in a included or imported schema
+            xmlSchemaGroup = (XmlSchemaGroup) 
parentSchema.getGroups().getItem(groupQName);
+            if (xmlSchemaGroup == null) {
+                // try to find in an import or an include
+                XmlSchemaObjectCollection includes = 
parentSchema.getIncludes();
+                if (includes != null) {
+                    Iterator includesIter = includes.getIterator();
+                    Object object = null;
+                    while (includesIter.hasNext()) {
+                        object = includesIter.next();
+                        if (object instanceof XmlSchemaImport) {
+                            XmlSchema schema1 = ((XmlSchemaImport) 
object).getSchema();
+                            xmlSchemaGroup = (XmlSchemaGroup) 
schema1.getGroups().getItem(groupQName);
+                        }
+                        if (object instanceof XmlSchemaInclude) {
+                            XmlSchema schema1 = ((XmlSchemaInclude) 
object).getSchema();
+                            xmlSchemaGroup = (XmlSchemaGroup) 
schema1.getGroups().getItem(groupQName);
+                        }
+                        if (xmlSchemaGroup != null){
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+        return xmlSchemaGroup;
     }
 
     /**



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

Reply via email to