You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by am...@apache.org on 2007/05/23 06:43:54 UTC

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

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: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org