You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2005/02/28 01:29:33 UTC

svn commit: r155653 - in geronimo/trunk/modules/axis-builder: project.xml src/java/org/apache/geronimo/axis/builder/AxisBuilder.java src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java src/schema/ src/schema/soap_encoding_1_1.xsd src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java

Author: djencks
Date: Sun Feb 27 16:29:31 2005
New Revision: 155653

URL: http://svn.apache.org/viewcvs?view=rev&rev=155653
Log:
Add soap-encoding schema to basic type system.  Only analyze the schemas in one way.  Construct type mapping info for lightweight jaxrpc mappings

Added:
    geronimo/trunk/modules/axis-builder/src/schema/
    geronimo/trunk/modules/axis-builder/src/schema/soap_encoding_1_1.xsd
Modified:
    geronimo/trunk/modules/axis-builder/project.xml
    geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java
    geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java
    geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java

Modified: geronimo/trunk/modules/axis-builder/project.xml
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/project.xml?view=diff&r1=155652&r2=155653
==============================================================================
--- geronimo/trunk/modules/axis-builder/project.xml (original)
+++ geronimo/trunk/modules/axis-builder/project.xml Sun Feb 27 16:29:31 2005
@@ -236,7 +236,7 @@
     <build>
         <resources>
             <resource>
-                <directory>${basedir}/src/etc</directory>
+                <directory>${basedir}/src/schema</directory>
             </resource>
             <resource>
                 <directory>${basedir}/target/xmlbeans</directory>

Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java?view=diff&r1=155652&r2=155653
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/AxisBuilder.java Sun Feb 27 16:29:31 2005
@@ -107,6 +107,7 @@
 import org.apache.geronimo.xbeans.j2ee.WsdlReturnValueMappingType;
 import org.apache.geronimo.xbeans.j2ee.VariableMappingType;
 import org.apache.xmlbeans.SchemaType;
+import org.apache.xmlbeans.SchemaProperty;
 import org.objectweb.asm.Type;
 import org.w3.x2001.xmlSchema.ComplexType;
 import org.w3.x2001.xmlSchema.ExplicitGroup;
@@ -222,9 +223,9 @@
 
         Map wsdlPortMap = service.getPorts();
 
-        Map complexTypeMap = WSDescriptorParser.getComplexTypesInWsdl(definition);
         Map exceptionMap = WSDescriptorParser.getExceptionMap(mapping);
         Map schemaTypeKeyToSchemaTypeMap = WSDescriptorParser.buildSchemaTypeKeyToSchemaTypeMap(definition);
+        Map complexTypeMap = WSDescriptorParser.getComplexTypesInWsdl(schemaTypeKeyToSchemaTypeMap);
 
         for (Iterator iterator = wsdlPortMap.entrySet().iterator(); iterator.hasNext();) {
             Map.Entry entry = (Map.Entry) iterator.next();
@@ -268,8 +269,9 @@
                     OperationInfo operationInfo = buildOperationInfoLightweight(method, bindingOperation, portStyle, soapVersion);
                     operationInfos[i++] = operationInfo;
                 }
-                List typeMappings = Collections.EMPTY_LIST;
-                Map typeDescriptors = Collections.EMPTY_MAP;
+                List typeMappings = new ArrayList();
+                Map typeDescriptors = new HashMap();
+                buildTypeInfoLightWeight(schemaTypeKeyToSchemaTypeMap, mapping, classLoader, typeMappings, typeDescriptors);
                 seiFactory = createSEIFactory(portName, enhancedServiceEndpointClass, serviceImpl, typeMappings, typeDescriptors, location, operationInfos, handlerInfos, context, classLoader);
             } else {
                 //complete jaxrpc mapping file supplied
@@ -296,57 +298,7 @@
                 JavaXmlTypeMappingType[] javaXmlTypeMappings = mapping.getJavaXmlTypeMappingArray();
                 List typeMappings = new ArrayList();
                 Map typeDescriptors = new HashMap();
-                for (int j = 0; j < javaXmlTypeMappings.length; j++) {
-                    JavaXmlTypeMappingType javaXmlTypeMapping = javaXmlTypeMappings[j];
-                    //default settings
-                    Class serializerFactoryClass = BeanSerializerFactory.class;
-                    Class deserializerFactoryClass = BeanDeserializerFactory.class;
-
-                    String className = javaXmlTypeMapping.getJavaType().getStringValue().trim();
-
-                    Class clazz = null;
-                    try {
-                        clazz = ClassLoading.loadClass(className, classLoader);
-                    } catch (ClassNotFoundException e) {
-                        throw new DeploymentException("Could not load java type", e);
-                    }
-                    if (clazz.isArray()) {
-                        serializerFactoryClass = ArraySerializerFactory.class;
-                        deserializerFactoryClass = ArrayDeserializerFactory.class;
-                    }
-
-                    QName typeName;
-                    SchemaTypeKey key;
-                    TypeMappingInfo typeMappingInfo = null;
-                    boolean isElement = javaXmlTypeMapping.getQnameScope().getStringValue().equals("element");
-                    boolean isSimpleType = javaXmlTypeMapping.getQnameScope().getStringValue().equals("simpleType");
-                    if (javaXmlTypeMapping.isSetRootTypeQname()) {
-                        typeName = javaXmlTypeMapping.getRootTypeQname().getQNameValue();
-                        typeMappingInfo = new TypeMappingInfo(clazz, typeName, serializerFactoryClass, deserializerFactoryClass);
-                        key = new SchemaTypeKey(typeName, isElement, isSimpleType, false);
-                    } else if (javaXmlTypeMapping.isSetAnonymousTypeQname()) {
-                        String anonTypeQNameString = javaXmlTypeMapping.getAnonymousTypeQname().getStringValue();
-                        int pos = anonTypeQNameString.lastIndexOf(":");
-                        if (pos == -1) {
-                            throw new DeploymentException("anon QName is invalid, no final ':' " + anonTypeQNameString);
-                        }
-                        //this appears to be ignored...
-                        typeName = new QName(anonTypeQNameString.substring(0, pos), anonTypeQNameString.substring(pos + 1));
-                        typeMappingInfo = new TypeMappingInfo(clazz, typeName, serializerFactoryClass, deserializerFactoryClass);
-                        key = new SchemaTypeKey(typeName, isElement, isSimpleType, true);
-                    } else {
-                        throw new DeploymentException("either root type qname or anonymous type qname must be set");
-                    }
-                    typeMappings.add(typeMappingInfo);
-                    SchemaType schemaType = (SchemaType) schemaTypeKeyToSchemaTypeMap.get(key);
-                    if (schemaType == null) {
-                        throw new DeploymentException("Schema type key " + key + " not found in analyzed schema: " + schemaTypeKeyToSchemaTypeMap);
-                    }
-                    TypeDesc typeDesc = getTypeDescriptor(clazz, typeName, javaXmlTypeMapping, schemaType);
-                    typeDescriptors.put(clazz, typeDesc);
-
-
-                }
+                buildTypeInfoHeavyweight(javaXmlTypeMappings, schemaTypeKeyToSchemaTypeMap, classLoader, typeMappings, typeDescriptors);
                 seiFactory = createSEIFactory(portName, enhancedServiceEndpointClass, serviceImpl, typeMappings, typeDescriptors, location, operationInfos, handlerInfos, context, classLoader);
             }
             seiPortNameToFactoryMap.put(portName, seiFactory);
@@ -354,6 +306,96 @@
         }
     }
 
+    private void buildTypeInfoLightWeight(Map schemaTypeKeyToSchemaTypeMap, JavaWsdlMappingType mapping, ClassLoader classLoader, List typeMappings, Map typeDescriptors) throws DeploymentException {
+        for (Iterator iterator = schemaTypeKeyToSchemaTypeMap.entrySet().iterator(); iterator.hasNext();) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            SchemaTypeKey key = (SchemaTypeKey) entry.getKey();
+//            SchemaType schemaType = (SchemaType) entry.getValue();
+            if (!key.isElement() && !key.isAnonymous()) {
+                //default settings
+                Class serializerFactoryClass = BeanSerializerFactory.class;
+                Class deserializerFactoryClass = BeanDeserializerFactory.class;
+                QName typeQName = key.getqName();
+                String namespace = typeQName.getNamespaceURI();
+                String packageName = WSDescriptorParser.getPackageFromNamespace(namespace, mapping);
+                String classShortName = typeQName.getLocalPart();
+                String className = packageName + "." + classShortName;
+
+                Class clazz = null;
+                try {
+                    clazz = ClassLoading.loadClass(className, classLoader);
+                } catch (ClassNotFoundException e) {
+                    throw new DeploymentException("Could not load java type", e);
+                }
+                if (clazz.isArray()) {
+                    serializerFactoryClass = ArraySerializerFactory.class;
+                    deserializerFactoryClass = ArrayDeserializerFactory.class;
+                }
+
+                TypeMappingInfo typeMappingInfo = new TypeMappingInfo(clazz, typeQName, serializerFactoryClass, deserializerFactoryClass);
+                typeMappings.add(typeMappingInfo);
+                //TODO construct typedesc as well.
+//                TypeDesc typeDesc = getTypeDescriptor(clazz, typeQName, javaXmlTypeMapping, schemaType);
+//                typeDescriptors.put(clazz, typeDesc);
+
+            }
+        }
+    }
+
+    private void buildTypeInfoHeavyweight(JavaXmlTypeMappingType[] javaXmlTypeMappings, Map schemaTypeKeyToSchemaTypeMap, ClassLoader classLoader, List typeMappings, Map typeDescriptors) throws DeploymentException {
+        for (int j = 0; j < javaXmlTypeMappings.length; j++) {
+            JavaXmlTypeMappingType javaXmlTypeMapping = javaXmlTypeMappings[j];
+            //default settings
+            Class serializerFactoryClass = BeanSerializerFactory.class;
+            Class deserializerFactoryClass = BeanDeserializerFactory.class;
+
+            String className = javaXmlTypeMapping.getJavaType().getStringValue().trim();
+
+            Class clazz = null;
+            try {
+                clazz = ClassLoading.loadClass(className, classLoader);
+            } catch (ClassNotFoundException e) {
+                throw new DeploymentException("Could not load java type", e);
+            }
+            if (clazz.isArray()) {
+                serializerFactoryClass = ArraySerializerFactory.class;
+                deserializerFactoryClass = ArrayDeserializerFactory.class;
+            }
+
+            QName typeName;
+            SchemaTypeKey key;
+            TypeMappingInfo typeMappingInfo = null;
+            boolean isElement = javaXmlTypeMapping.getQnameScope().getStringValue().equals("element");
+            boolean isSimpleType = javaXmlTypeMapping.getQnameScope().getStringValue().equals("simpleType");
+            if (javaXmlTypeMapping.isSetRootTypeQname()) {
+                typeName = javaXmlTypeMapping.getRootTypeQname().getQNameValue();
+                typeMappingInfo = new TypeMappingInfo(clazz, typeName, serializerFactoryClass, deserializerFactoryClass);
+                key = new SchemaTypeKey(typeName, isElement, isSimpleType, false);
+            } else if (javaXmlTypeMapping.isSetAnonymousTypeQname()) {
+                String anonTypeQNameString = javaXmlTypeMapping.getAnonymousTypeQname().getStringValue();
+                int pos = anonTypeQNameString.lastIndexOf(":");
+                if (pos == -1) {
+                    throw new DeploymentException("anon QName is invalid, no final ':' " + anonTypeQNameString);
+                }
+                //this appears to be ignored...
+                typeName = new QName(anonTypeQNameString.substring(0, pos), anonTypeQNameString.substring(pos + 1));
+                typeMappingInfo = new TypeMappingInfo(clazz, typeName, serializerFactoryClass, deserializerFactoryClass);
+                key = new SchemaTypeKey(typeName, isElement, isSimpleType, true);
+            } else {
+                throw new DeploymentException("either root type qname or anonymous type qname must be set");
+            }
+            typeMappings.add(typeMappingInfo);
+            SchemaType schemaType = (SchemaType) schemaTypeKeyToSchemaTypeMap.get(key);
+            if (schemaType == null) {
+                throw new DeploymentException("Schema type key " + key + " not found in analyzed schema: " + schemaTypeKeyToSchemaTypeMap);
+            }
+            TypeDesc typeDesc = getTypeDescriptor(clazz, typeName, javaXmlTypeMapping, schemaType);
+            typeDescriptors.put(clazz, typeDesc);
+
+
+        }
+    }
+
     private TypeDesc getTypeDescriptor(Class javaClass, QName typeQName, JavaXmlTypeMappingType javaXmlTypeMapping, SchemaType schemaType) throws DeploymentException {
         boolean isRestriction = schemaType.getDerivationType() == SchemaType.DT_RESTRICTION;
         TypeDesc typeDesc = new TypeDesc(javaClass, !isRestriction);
@@ -784,16 +826,23 @@
                 if (!isComplex) {
                     throw new DeploymentException("ConstructorParameterOrder can only be set for complex types, not " + faultTypeQName);
                 }
-                ComplexType complexType = (ComplexType) complexTypeMap.get(faultTypeQName);
+                SchemaType complexType = (SchemaType) complexTypeMap.get(faultTypeQName);
                 Map elementMap = new HashMap();
-                ExplicitGroup explicitGroup = complexType.getSequence();
-                LocalElement[] elements = explicitGroup.getElementArray();
-                for (int i = 0; i < elements.length; i++) {
-                    LocalElement element = elements[i];
-                    String elementName = element.getName();
-                    QName elementType = element.getType();
-                    elementMap.put(elementName, elementType);
-                }
+                SchemaProperty[] properties = complexType.getProperties();
+                for (int i = 0; i < properties.length; i++) {
+                    SchemaProperty property = properties[i];
+                    QName elementName = property.getName();
+                    SchemaType elementType = property.getType();
+                    QName elementTypeQName = elementType.getName();
+                    elementMap.put(elementName.getLocalPart(), elementTypeQName);
+                }
+//                LocalElement[] elements = explicitGroup.getElementArray();
+//                for (int i = 0; i < elements.length; i++) {
+//                    LocalElement element = elements[i];
+//                    String elementName = element.getName();
+//                    QName elementType = element.getType();
+//                    elementMap.put(elementName, elementType);
+//                }
                 ArrayList parameterTypes = new ArrayList();
                 ConstructorParameterOrderType constructorParameterOrder = exceptionMapping.getConstructorParameterOrder();
                 for (int i = 0; i < constructorParameterOrder.getElementNameArray().length; i++) {

Modified: geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java?view=diff&r1=155652&r2=155653
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java (original)
+++ geronimo/trunk/modules/axis-builder/src/java/org/apache/geronimo/axis/builder/WSDescriptorParser.java Sun Feb 27 16:29:31 2005
@@ -102,6 +102,29 @@
  */
 public class WSDescriptorParser {
 
+    private static SchemaTypeSystem basicTypeSystem;
+
+    static {
+        URL url = WSDescriptorParser.class.getClassLoader().getResource("soap_encoding_1_1.xsd");
+        if (url == null) {
+            throw new RuntimeException("Could not locate soap encoding schema");
+        }
+        Collection errors = new ArrayList();
+        XmlOptions xmlOptions = new XmlOptions();
+        xmlOptions.setErrorListener(errors);
+        try {
+            XmlObject xmlObject = SchemaConversionUtils.parse(url);
+            basicTypeSystem = XmlBeans.compileXsd(new XmlObject[]{xmlObject}, XmlBeans.getBuiltinTypeSystem(), xmlOptions);
+            if (errors.size() > 0) {
+                throw new RuntimeException("Could not compile schema type system: errors: " + errors);
+            }
+        } catch (XmlException e) {
+            throw new RuntimeException("Could not compile schema type system", e);
+        } catch (IOException e) {
+            throw new RuntimeException("Could not compile schema type system", e);
+        }
+    }
+
     public static Map parseWebServiceDescriptor(URL wsDDUrl, JarFile moduleFile, boolean isEJB) throws DeploymentException {
         try {
             WebservicesDocument webservicesDocument = WebservicesDocument.Factory.parse(wsDDUrl);
@@ -213,7 +236,7 @@
         xmlOptions.setErrorListener(errors);
         XmlObject[] schemas = (XmlObject[]) schemaList.toArray(new XmlObject[schemaList.size()]);
         try {
-            SchemaTypeSystem schemaTypeSystem = XmlBeans.compileXsd(schemas, XmlBeans.getBuiltinTypeSystem(), xmlOptions);
+            SchemaTypeSystem schemaTypeSystem = XmlBeans.compileXsd(schemas, basicTypeSystem, xmlOptions);
             if (errors.size() > 0) {
                 throw new DeploymentException("Could not compile schema type system: errors: " + errors);
             }
@@ -243,7 +266,7 @@
                     Element element = unknownExtensibilityElement.getElement();
                     String elementNamespace = element.getNamespaceURI();
                     String elementLocalName = element.getNodeName();
-                    if ("http://www.w3.org/2001/XMLSchema".equals(elementNamespace) &&  "schema".equals(elementLocalName)) {
+                    if ("http://www.w3.org/2001/XMLSchema".equals(elementNamespace) && "schema".equals(elementLocalName)) {
                         addSchemaElement(element, namespaceMap, schemaList);
                     }
                 }
@@ -397,57 +420,20 @@
     }
 
     /**
-     * Find all the top level complex types in the schemas in the definitions' types.
+     * Find all the complex types in the previously constructed schema analysis.
      * Put them in a map from complex type QName to schema fragment.
-     * TODO it is not clear what happens with included schemas.
-     *
-     * @param definition
+     * @param schemaTypeKeyToSchemaTypeMap
      * @return
-     * @throws DeploymentException
      */
-    public static Map getComplexTypesInWsdl(Definition definition) throws DeploymentException {
+    public static Map getComplexTypesInWsdl(Map schemaTypeKeyToSchemaTypeMap) {
         Map complexTypeMap = new HashMap();
-        Types types = definition.getTypes();
-        Map namespaceMap = definition.getNamespaces();
-        if (types != null) {
-            List schemas = types.getExtensibilityElements();
-            for (Iterator iterator = schemas.iterator(); iterator.hasNext();) {
-                Object o = iterator.next();
-                if (o instanceof Schema) {
-                    Schema unknownExtensibilityElement = (Schema) o;
-                    QName elementType = unknownExtensibilityElement.getElementType();
-                    if (new QName("http://www.w3.org/2001/XMLSchema", "schema").equals(elementType)) {
-                        Element element = unknownExtensibilityElement.getElement();
-                        try {
-                            XmlObject xmlObject = SchemaConversionUtils.parse(element);
-                            XmlCursor cursor = xmlObject.newCursor();
-                            try {
-                                cursor.toFirstContentToken();
-                                for (Iterator namespaces = namespaceMap.entrySet().iterator(); namespaces.hasNext();) {
-                                    Map.Entry entry = (Map.Entry) namespaces.next();
-                                    cursor.insertNamespace((String) entry.getKey(), (String) entry.getValue());
-                                }
-                            } finally {
-                                cursor.dispose();
-                            }
-                            SchemaDocument schemaDoc = (SchemaDocument) xmlObject.changeType(SchemaDocument.type);
-                            SchemaConversionUtils.validateDD(schemaDoc);
-                            SchemaDocument.Schema schema = schemaDoc.getSchema();
-                            String targetNamespace = schema.getTargetNamespace();
-                            ComplexType[] complexTypes = schema.getComplexTypeArray();
-                            for (int j = 0; j < complexTypes.length; j++) {
-                                ComplexType complexType = complexTypes[j];
-                                String complexTypeName = complexType.getName();
-                                QName complexTypeQName = new QName(targetNamespace, complexTypeName);
-                                complexTypeMap.put(complexTypeQName, complexType);
-                            }
-                        } catch (XmlException e) {
-                            throw new DeploymentException("Invalid schema in wsdl", e);
-                        }
-                    } else {
-                        //problems??
-                    }
-                }
+        for (Iterator iterator = schemaTypeKeyToSchemaTypeMap.entrySet().iterator(); iterator.hasNext();) {
+            Map.Entry entry = (Map.Entry) iterator.next();
+            SchemaTypeKey key = (SchemaTypeKey) entry.getKey();
+            if (!key.isSimpleType() && !key.isAnonymous()) {
+                QName qName = key.getqName();
+                SchemaType schemaType = (SchemaType) entry.getValue();
+                complexTypeMap.put(qName, schemaType);
             }
         }
         return complexTypeMap;

Added: geronimo/trunk/modules/axis-builder/src/schema/soap_encoding_1_1.xsd
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/schema/soap_encoding_1_1.xsd?view=auto&rev=155653
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/schema/soap_encoding_1_1.xsd (added)
+++ geronimo/trunk/modules/axis-builder/src/schema/soap_encoding_1_1.xsd Sun Feb 27 16:29:31 2005
@@ -0,0 +1,536 @@
+<?xml version='1.0' encoding='UTF-8' ?>
+
+<!-- Schema for the SOAP/1.1 encoding
+
+     This schema has been produced using W3C's SOAP Version 1.2 schema
+     found at:
+
+     http://www.w3.org/2001/06/soap-encoding
+
+     Copyright 2001 Martin Gudgin, Developmentor.
+	 http://www.develop.co.uk
+
+     Changes made are the following:
+     - reverted namespace to http://schemas.xmlsoap.org/soap/encoding/
+     - reverted root to only allow 0 and 1 as lexical values
+
+	 Further changes:
+
+	 - removed default value from root attribute declaration - 20030314
+
+     Original copyright:
+     
+     Copyright 2001 W3C (Massachusetts Institute of Technology,
+     Institut National de Recherche en Informatique et en Automatique,
+     Keio University). All Rights Reserved.
+     http://www.w3.org/Consortium/Legal/
+
+     This document is governed by the W3C Software License [1] as
+     described in the FAQ [2].
+
+     [1] http://www.w3.org/Consortium/Legal/copyright-software-19980720
+     [2] http://www.w3.org/Consortium/Legal/IPR-FAQ-20000620.html#DTD
+-->
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+           xmlns:tns="http://schemas.xmlsoap.org/soap/encoding/"
+           targetNamespace="http://schemas.xmlsoap.org/soap/encoding/" >
+        
+ <xs:attribute name="root" >
+   <xs:annotation>
+     <xs:documentation>
+	   'root' can be used to distinguish serialization roots from other
+       elements that are present in a serialization but are not roots of
+       a serialized value graph 
+	 </xs:documentation>
+   </xs:annotation>
+   <xs:simpleType>
+     <xs:restriction base='xs:boolean'>
+	   <xs:pattern value='0|1' />
+	 </xs:restriction>
+   </xs:simpleType>
+ </xs:attribute>
+
+  <xs:attributeGroup name="commonAttributes" >
+    <xs:annotation>
+	  <xs:documentation>
+	    Attributes common to all elements that function as accessors or 
+        represent independent (multi-ref) values.  The href attribute is
+        intended to be used in a manner like CONREF.  That is, the element
+        content should be empty iff the href attribute appears
+	  </xs:documentation>
+	</xs:annotation>
+    <xs:attribute name="id" type="xs:ID" />
+    <xs:attribute name="href" type="xs:anyURI" />
+    <xs:anyAttribute namespace="##other" processContents="lax" />
+  </xs:attributeGroup>
+
+  <!-- Global Attributes.  The following attributes are intended to be usable via qualified attribute names on any complex type referencing them. -->
+       
+  <!-- Array attributes. Needed to give the type and dimensions of an array's contents, and the offset for partially-transmitted arrays. -->
+   
+  <xs:simpleType name="arrayCoordinate" >
+    <xs:restriction base="xs:string" />
+  </xs:simpleType>
+          
+  <xs:attribute name="arrayType" type="xs:string" />
+  <xs:attribute name="offset" type="tns:arrayCoordinate" />
+  
+  <xs:attributeGroup name="arrayAttributes" >
+    <xs:attribute ref="tns:arrayType" />
+    <xs:attribute ref="tns:offset" />
+  </xs:attributeGroup>    
+  
+  <xs:attribute name="position" type="tns:arrayCoordinate" /> 
+  
+  <xs:attributeGroup name="arrayMemberAttributes" >
+    <xs:attribute ref="tns:position" />
+  </xs:attributeGroup>    
+
+  <xs:group name="Array" >
+    <xs:sequence>
+      <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+	</xs:sequence>
+  </xs:group>
+
+  <xs:element name="Array" type="tns:Array" />
+  <xs:complexType name="Array" >
+    <xs:annotation>
+	  <xs:documentation>
+	   'Array' is a complex type for accessors identified by position 
+	  </xs:documentation>
+	</xs:annotation>
+    <xs:group ref="tns:Array" minOccurs="0" />
+    <xs:attributeGroup ref="tns:arrayAttributes" />
+    <xs:attributeGroup ref="tns:commonAttributes" />
+  </xs:complexType> 
+
+  <!-- 'Struct' is a complex type for accessors identified by name. 
+       Constraint: No element may be have the same name as any other,
+       nor may any element have a maxOccurs > 1. -->
+   
+  <xs:element name="Struct" type="tns:Struct" />
+
+  <xs:group name="Struct" >
+    <xs:sequence>
+      <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax" />
+	</xs:sequence>
+  </xs:group>
+
+  <xs:complexType name="Struct" >
+    <xs:group ref="tns:Struct" minOccurs="0" />
+    <xs:attributeGroup ref="tns:commonAttributes"/>
+  </xs:complexType> 
+
+  <!-- 'Base64' can be used to serialize binary data using base64 encoding
+       as defined in RFC2045 but without the MIME line length limitation. -->
+
+  <xs:simpleType name="base64" >
+    <xs:restriction base="xs:base64Binary" />
+  </xs:simpleType>
+
+ <!-- Element declarations corresponding to each of the simple types in the 
+      XML Schemas Specification. -->
+
+  <xs:element name="duration" type="tns:duration" />
+  <xs:complexType name="duration" >
+    <xs:simpleContent>
+      <xs:extension base="xs:duration" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="dateTime" type="tns:dateTime" />
+  <xs:complexType name="dateTime" >
+    <xs:simpleContent>
+      <xs:extension base="xs:dateTime" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+
+
+  <xs:element name="NOTATION" type="tns:NOTATION" />
+  <xs:complexType name="NOTATION" >
+    <xs:simpleContent>
+      <xs:extension base="xs:QName" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  
+
+  <xs:element name="time" type="tns:time" />
+  <xs:complexType name="time" >
+    <xs:simpleContent>
+      <xs:extension base="xs:time" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="date" type="tns:date" />
+  <xs:complexType name="date" >
+    <xs:simpleContent>
+      <xs:extension base="xs:date" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="gYearMonth" type="tns:gYearMonth" />
+  <xs:complexType name="gYearMonth" >
+    <xs:simpleContent>
+      <xs:extension base="xs:gYearMonth" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="gYear" type="tns:gYear" />
+  <xs:complexType name="gYear" >
+    <xs:simpleContent>
+      <xs:extension base="xs:gYear" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="gMonthDay" type="tns:gMonthDay" />
+  <xs:complexType name="gMonthDay" >
+    <xs:simpleContent>
+      <xs:extension base="xs:gMonthDay" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="gDay" type="tns:gDay" />
+  <xs:complexType name="gDay" >
+    <xs:simpleContent>
+      <xs:extension base="xs:gDay" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="gMonth" type="tns:gMonth" />
+  <xs:complexType name="gMonth" >
+    <xs:simpleContent>
+      <xs:extension base="xs:gMonth" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  
+  <xs:element name="boolean" type="tns:boolean" />
+  <xs:complexType name="boolean" >
+    <xs:simpleContent>
+      <xs:extension base="xs:boolean" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="base64Binary" type="tns:base64Binary" />
+  <xs:complexType name="base64Binary" >
+    <xs:simpleContent>
+      <xs:extension base="xs:base64Binary" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="hexBinary" type="tns:hexBinary" />
+  <xs:complexType name="hexBinary" >
+    <xs:simpleContent>
+     <xs:extension base="xs:hexBinary" >
+       <xs:attributeGroup ref="tns:commonAttributes" />
+     </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="float" type="tns:float" />
+  <xs:complexType name="float" >
+    <xs:simpleContent>
+      <xs:extension base="xs:float" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="double" type="tns:double" />
+  <xs:complexType name="double" >
+    <xs:simpleContent>
+      <xs:extension base="xs:double" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="anyURI" type="tns:anyURI" />
+  <xs:complexType name="anyURI" >
+    <xs:simpleContent>
+      <xs:extension base="xs:anyURI" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="QName" type="tns:QName" />
+  <xs:complexType name="QName" >
+    <xs:simpleContent>
+      <xs:extension base="xs:QName" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  
+  <xs:element name="string" type="tns:string" />
+  <xs:complexType name="string" >
+    <xs:simpleContent>
+      <xs:extension base="xs:string" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="normalizedString" type="tns:normalizedString" />
+  <xs:complexType name="normalizedString" >
+    <xs:simpleContent>
+      <xs:extension base="xs:normalizedString" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="token" type="tns:token" />
+  <xs:complexType name="token" >
+    <xs:simpleContent>
+      <xs:extension base="xs:token" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="language" type="tns:language" />
+  <xs:complexType name="language" >
+    <xs:simpleContent>
+      <xs:extension base="xs:language" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="Name" type="tns:Name" />
+  <xs:complexType name="Name" >
+    <xs:simpleContent>
+      <xs:extension base="xs:Name" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="NMTOKEN" type="tns:NMTOKEN" />
+  <xs:complexType name="NMTOKEN" >
+    <xs:simpleContent>
+      <xs:extension base="xs:NMTOKEN" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="NCName" type="tns:NCName" />
+  <xs:complexType name="NCName" >
+    <xs:simpleContent>
+      <xs:extension base="xs:NCName" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="NMTOKENS" type="tns:NMTOKENS" />
+  <xs:complexType name="NMTOKENS" >
+    <xs:simpleContent>
+      <xs:extension base="xs:NMTOKENS" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="ID" type="tns:ID" />
+  <xs:complexType name="ID" >
+    <xs:simpleContent>
+      <xs:extension base="xs:ID" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="IDREF" type="tns:IDREF" />
+  <xs:complexType name="IDREF" >
+    <xs:simpleContent>
+      <xs:extension base="xs:IDREF" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="ENTITY" type="tns:ENTITY" />
+  <xs:complexType name="ENTITY" >
+    <xs:simpleContent>
+      <xs:extension base="xs:ENTITY" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="IDREFS" type="tns:IDREFS" />
+  <xs:complexType name="IDREFS" >
+    <xs:simpleContent>
+      <xs:extension base="xs:IDREFS" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="ENTITIES" type="tns:ENTITIES" />
+  <xs:complexType name="ENTITIES" >
+    <xs:simpleContent>
+      <xs:extension base="xs:ENTITIES" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="decimal" type="tns:decimal" />
+  <xs:complexType name="decimal" >
+    <xs:simpleContent>
+      <xs:extension base="xs:decimal" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="integer" type="tns:integer" />
+  <xs:complexType name="integer" >
+    <xs:simpleContent>
+      <xs:extension base="xs:integer" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="nonPositiveInteger" type="tns:nonPositiveInteger" />
+  <xs:complexType name="nonPositiveInteger" >
+    <xs:simpleContent>
+      <xs:extension base="xs:nonPositiveInteger" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="negativeInteger" type="tns:negativeInteger" />
+  <xs:complexType name="negativeInteger" >
+    <xs:simpleContent>
+      <xs:extension base="xs:negativeInteger" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="long" type="tns:long" />
+  <xs:complexType name="long" >
+    <xs:simpleContent>
+      <xs:extension base="xs:long" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="int" type="tns:int" />
+  <xs:complexType name="int" >
+    <xs:simpleContent>
+      <xs:extension base="xs:int" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="short" type="tns:short" />
+  <xs:complexType name="short" >
+    <xs:simpleContent>
+      <xs:extension base="xs:short" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="byte" type="tns:byte" />
+  <xs:complexType name="byte" >
+    <xs:simpleContent>
+      <xs:extension base="xs:byte" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="nonNegativeInteger" type="tns:nonNegativeInteger" />
+  <xs:complexType name="nonNegativeInteger" >
+    <xs:simpleContent>
+      <xs:extension base="xs:nonNegativeInteger" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="unsignedLong" type="tns:unsignedLong" />
+  <xs:complexType name="unsignedLong" >
+    <xs:simpleContent>
+      <xs:extension base="xs:unsignedLong" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="unsignedInt" type="tns:unsignedInt" />
+  <xs:complexType name="unsignedInt" >
+    <xs:simpleContent>
+      <xs:extension base="xs:unsignedInt" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="unsignedShort" type="tns:unsignedShort" />
+  <xs:complexType name="unsignedShort" >
+    <xs:simpleContent>
+      <xs:extension base="xs:unsignedShort" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="unsignedByte" type="tns:unsignedByte" />
+  <xs:complexType name="unsignedByte" >
+    <xs:simpleContent>
+      <xs:extension base="xs:unsignedByte" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="positiveInteger" type="tns:positiveInteger" />
+  <xs:complexType name="positiveInteger" >
+    <xs:simpleContent>
+      <xs:extension base="xs:positiveInteger" >
+        <xs:attributeGroup ref="tns:commonAttributes" />
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+
+  <xs:element name="anyType" />
+</xs:schema>
+

Modified: geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java?view=diff&r1=155652&r2=155653
==============================================================================
--- geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java (original)
+++ geronimo/trunk/modules/axis-builder/src/test/org/apache/geronimo/axis/builder/ServiceReferenceTest.java Sun Feb 27 16:29:31 2005
@@ -250,7 +250,8 @@
         WSDLFactory factory = WSDLFactory.newInstance();
         WSDLReader reader = factory.newWSDLReader();
         Definition definition = reader.readWSDL(wsdlFile.toURI().toString());
-        Map complexTypeMap = WSDescriptorParser.getComplexTypesInWsdl(definition);
+        Map schemaTypeKeyToSchemaTypeMap = WSDescriptorParser.buildSchemaTypeKeyToSchemaTypeMap(definition);
+        Map complexTypeMap = WSDescriptorParser.getComplexTypesInWsdl(schemaTypeKeyToSchemaTypeMap);
         assertEquals(7, complexTypeMap.size());
     }