You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yoko-commits@incubator.apache.org by en...@apache.org on 2006/09/13 14:40:54 UTC

svn commit: r442994 - in /incubator/yoko/trunk/tools/src: main/java/org/apache/yoko/tools/ main/java/org/apache/yoko/tools/processors/wsdl/ test/java/org/apache/yoko/tools/processors/ test/resources/idlgen/ test/resources/wsdl/

Author: enolan
Date: Wed Sep 13 07:40:53 2006
New Revision: 442994

URL: http://svn.apache.org/viewvc?view=rev&rev=442994
Log:
Yoko-111 - Support for Attribute types for wsdltoidl with some refactoring.

Added:
    incubator/yoko/trunk/tools/src/test/resources/idlgen/TypeInheritance.wsdl   (with props)
    incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_typeInheritance.idl
    incubator/yoko/trunk/tools/src/test/resources/wsdl/TypeInheritance.wsdl   (with props)
Modified:
    incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/IDLToWSDL.java
    incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java
    incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLTypes.java
    incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTypeTest.java
    incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToIDLGenerationTest.java

Modified: incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/IDLToWSDL.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/IDLToWSDL.java?view=diff&rev=442994&r1=442993&r2=442994
==============================================================================
--- incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/IDLToWSDL.java (original)
+++ incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/IDLToWSDL.java Wed Sep 13 07:40:53 2006
@@ -66,9 +66,7 @@
                 if (isVerboseOn()) {
                     env.put(ToolConstants.CFG_VERBOSE, Boolean.TRUE);
                 }
-                env.put(ToolConstants.CFG_CMD_ARG, args);
-
-                CommandDocument doc = super.getCommandDocument();
+                env.put(ToolConstants.CFG_CMD_ARG, args);                
                 initialise(env);
                 validate(env);
                 idlProcessor.setEnvironment(env);

Modified: incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java?view=diff&rev=442994&r1=442993&r2=442994
==============================================================================
--- incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java (original)
+++ incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToCorbaBinding.java Wed Sep 13 07:40:53 2006
@@ -661,14 +661,19 @@
             if (container instanceof XmlSchemaSequence) {
                 XmlSchemaSequence sequence = (XmlSchemaSequence)container;
                 CorbaTypeImpl memberType = processSequenceType(sequence, defaultName, schemaTypeName);
+                QName typeName = memberType.getQName();
                 if (memberType instanceof Struct) {
-                    Struct str = (Struct)memberType;
-                    Iterator iter = str.getMember().iterator();
-                    while (iter.hasNext()) {
-                        MemberType member = (MemberType)iter.next();
-                        members.add(member);
-                    }
+                    memberType.setQName(null);           
+                    if (!isDuplicate(memberType)) {
+                        typeMappingType.getStructOrExceptionOrUnion().add(memberType);
+                    }                    
                 }
+                
+                MemberType member = new MemberType(); 
+                member.setName(memberType.getName() + "_f");
+                member.setIdltype(typeName);
+                members.add(member);
+
             } else if (container instanceof XmlSchemaChoice) {
                 XmlSchemaChoice choice = (XmlSchemaChoice)container;
                 CorbaTypeImpl corbatype = processChoice(choice, defaultName, schemaTypeName);
@@ -740,12 +745,21 @@
     private CorbaTypeImpl processLocalElement(XmlSchemaElement element) throws Exception {
         CorbaTypeImpl membertype = new CorbaTypeImpl();
 
+        QName memName = null;
         if (element.isNillable()) {
 
             CorbaTypeImpl elemtype = convertSchemaToCorbaType(element.getSchemaType(), element.getQName(),
                                                               element.getSchemaType(), true);
-            QName name = createQNameTargetNamespace(elemtype.getQName().getLocalPart() + "_nil");
-            membertype = createNillableUnion(name, element.getQName(), elemtype.getQName());
+            QName name = createQNameTargetNamespace(elemtype.getQName().getLocalPart() + "_nil");            
+            membertype = createNillableUnion(name, element.getQName(), 
+                                             elemtype.getQName());
+            memName = createQNameCorbaNamespace(membertype.getQName().getLocalPart());            
+            if (membertype != null) {
+                membertype.setQName(null);           
+                if (!isDuplicate(membertype)) {
+                    typeMappingType.getStructOrExceptionOrUnion().add(membertype);
+                }
+            }
         } else {
             // Need TO DO
             // Need to check if its referencing a type first refname=""
@@ -774,9 +788,14 @@
                                        schemaName.getLocalPart());                
             }
             
-            CorbaTypeImpl arraytype = 
-                createArray(name, schemaName, membertype.getQName(), element.getMaxOccurs(),
-                                     element.getMinOccurs(), false);
+            CorbaTypeImpl arraytype = null;
+            if (memName != null) {
+                arraytype = createArray(name, schemaName, memName, 
+                                        element.getMaxOccurs(), element.getMinOccurs(), false);
+            } else {
+                arraytype = createArray(name, schemaName, membertype.getQName(), 
+                                        element.getMaxOccurs(), element.getMinOccurs(), false);
+            }
                         
             membertype.setName(arraytype.getName());
             membertype.setQName(arraytype.getQName());
@@ -899,6 +918,77 @@
         return corbatype;
     }
 
+    protected List<MemberType> processAttributesAsMembers(Iterator attrs) throws Exception {
+        QName memName = null;
+        List <MemberType>members = new ArrayList<MemberType>();
+
+        while (attrs.hasNext()) {
+            XmlSchemaAttribute attribute = (XmlSchemaAttribute)attrs.next();
+            CorbaTypeImpl membertype = null;
+
+            if (attribute.getUse().getValue().equals("none")
+                || attribute.getUse().getValue().equals(W3CConstants.USE_OPTIONAL)) {                
+                CorbaTypeImpl attType = null;
+                if (attribute.getSchemaType() != null) {                    
+                    attType = convertSchemaToCorbaType(attribute.getSchemaType(), 
+                                                       attribute.getQName(), 
+                                              attribute.getSchemaType(), true);
+                    if (attType != null) {
+                        QName typeName = attType.getQName();
+                        attType.setQName(null);           
+                        if (!isDuplicate(attType)) {
+                            typeMappingType.getStructOrExceptionOrUnion().add(attType);
+                        }
+                        QName name =  createQNameTargetNamespace(typeName.getLocalPart() + "_nil");
+                        membertype = createNillableUnion(name, attribute.getQName(), 
+                                     createQNameCorbaNamespace(typeName.getLocalPart()));
+                    }
+                } else {
+                    attType = processPrimitiveType(attribute.getSchemaTypeName());
+                    QName name =  createQNameTargetNamespace(attType.getQName().getLocalPart() + "_nil");
+                    membertype = createNillableUnion(name, attribute.getQName(), 
+                                     attType.getQName());
+
+                }
+                memName = createQNameCorbaNamespace(membertype.getQName().getLocalPart());
+                if (membertype != null) {
+                    membertype.setQName(null);           
+                    if (!isDuplicate(membertype)) {
+                        typeMappingType.getStructOrExceptionOrUnion().add(membertype);
+                    }
+                }
+            } else {
+                if (attribute.getSchemaType() != null) {
+                    membertype = convertSchemaToCorbaType(attribute.getSchemaType(), attribute.getQName(), 
+                                                      attribute.getSchemaType(), false);
+                } else {
+                    membertype = processPrimitiveType(attribute.getSchemaTypeName());
+                }
+            }
+
+            if (membertype != null) {
+                MemberType member;
+                String memberName = attribute.getQName().getLocalPart();
+
+                member = new MemberType();
+                member.setName(memberName);
+                if (memName != null) {
+                    member.setIdltype(memName);
+                } else {
+                    member.setIdltype(membertype.getQName());
+                }
+                members.add(member);
+            } else {
+                String msg = "Unsupported Attribute Found in CORBA Binding Generation:" 
+                    + attribute.getQName();
+                LOG.log(Level.WARNING, msg.toString());            
+            }
+        }
+
+        return members;
+    }
+
+    
     private CorbaTypeImpl processElementType(XmlSchemaElement stype, QName defaultName) 
         throws Exception {
 
@@ -1111,8 +1201,8 @@
             complex = (XmlSchemaComplexType)stype;
 
             if (!isLiteralArray(complex)   
-                && !isOMGUnion(complex) 
-                && !isUnion(complex)) {
+                && !wsdltypes.isOMGUnion(complex) 
+                && !wsdltypes.isUnion(complex)) {
                 exception = true;
             }
         }         
@@ -1243,9 +1333,9 @@
 
         if (isLiteralArray(complex)) {
             corbatype = processLiteralArray(complex, defaultName, anonymous);
-        } else if (isOMGUnion(complex)) {
+        } else if (wsdltypes.isOMGUnion(complex)) {
             corbatype = processOMGUnion(complex, defaultName);
-        } else if (isUnion(complex)) {
+        } else if (wsdltypes.isUnion(complex)) {
             corbatype = processRegularUnion(complex, defaultName);                                           
         } else if (complex.getQName() != null && isIDLObjectType(complex.getQName())) {
             // process it.                
@@ -1285,16 +1375,20 @@
         } else if (complex.getContentModel() instanceof XmlSchemaComplexContent) {
             corbaStruct = processComplexContentStruct((XmlSchemaComplexContent)complex.getContentModel(), 
                                                       defaultName, corbaStruct, schematypeName);        
-        } else {
-            // Process attributes at ComplexType level
+        } 
+        
+        // Process attributes at ComplexType level
+        if (complex.getAttributes().getIterator() != null) {
             Iterator iterator = complex.getAttributes().getIterator();
             List attlist2 = processAttributesAsMembers(iterator);
             MemberType member = new MemberType();
             for (int i = 0; i < attlist2.size(); i++) {
                 member = (MemberType)attlist2.get(i);
                 corbaStruct.getMember().add(member);
-            }            
+            }
+        }
 
+        if (complex.getParticle() != null) {
             List members = processContainerAsMembers(complex.getParticle(), defaultName, schematypeName);
 
             for (Iterator it = members.iterator(); it.hasNext();) {
@@ -1363,10 +1457,14 @@
                 = (XmlSchemaComplexContentExtension)complex.getContent();
             
             // Add base as a member of this struct
-            MemberType memberType = new MemberType();
-            memberType.setName(extype.getBaseTypeName().getLocalPart() + "_f");
-            QName typeName = createQNameCorbaNamespace(extype.getBaseTypeName().getLocalPart());
-            memberType.setIdltype(typeName);
+            MemberType memberType = new MemberType();     
+            QName extName = extype.getBaseTypeName();
+            memberType.setName(extName.getLocalPart() + "_f");
+            if (extName.getLocalPart().equals("anyType")) {
+                memberType.setIdltype(processPrimitiveType(extName).getQName());                
+            } else {
+                memberType.setIdltype(createQNameCorbaNamespace(extName.getLocalPart()));
+            }            
             corbaStruct.getMember().add(memberType);
             
             // process attributes at complexContent level
@@ -1380,25 +1478,8 @@
             // Process members of Current Type
             if (extype.getParticle() instanceof XmlSchemaChoice) {
                 XmlSchemaChoice choice = (XmlSchemaChoice)extype.getParticle();
-                QName choicename = createQNameTargetNamespace(schematypeName.getLocalPart() + "ChoiceType");
-                Union choiceunion = createUnion(choicename, choice,
-                                                defaultName, schematypeName);
-
-                String repoId = repoString + choiceunion.getQName().getLocalPart().replace('.', '/')
-                    + idlversion;
-                choiceunion.setRepositoryID(repoId);                                
-                
-                MemberType choicemem = new MemberType();
-                choicemem.setName(choiceunion.getQName().getLocalPart() + "_f");
-                QName type = createQNameCorbaNamespace(choiceunion.getQName().getLocalPart());
-                choicemem.setIdltype(type);                
-                corbaStruct.getMember().add(choicemem);
-                
-                if (!isDuplicate(choiceunion)) {
-                    choiceunion.setQName(null);
-                    typeMappingType.getStructOrExceptionOrUnion().add(choiceunion);
-                }
-
+                MemberType choicemem = processComplexContentStructChoice(choice, schematypeName, defaultName);
+                corbaStruct.getMember().add(choicemem);                                
             } else if (extype.getParticle() instanceof  XmlSchemaSequence) {
                 XmlSchemaSequence seq = (XmlSchemaSequence)extype.getParticle();
                 CorbaTypeImpl seqtype = 
@@ -1446,53 +1527,30 @@
         return corbaStruct;
     }
     
-            
-    protected List<MemberType> processAttributesAsMembers(Iterator attrs) throws Exception {
-        List <MemberType>members = new ArrayList<MemberType>();
-
-        while (attrs.hasNext()) {
-            XmlSchemaAttribute attribute = (XmlSchemaAttribute)attrs.next();
-            CorbaTypeImpl membertype = null;
-
-            if (attribute.getUse().getValue() != null
-                && attribute.getUse().getValue().equals(W3CConstants.USE_OPTIONAL)) {                
-                CorbaTypeImpl attType = null;
-                if (attribute.getSchemaType() != null) {
-                    attType = convertSchemaToCorbaType(attribute.getSchemaType(), 
-                                                       attribute.getQName(), 
-                                              attribute.getSchemaType(), true);
-                } else {
-                    attType = processPrimitiveType(attribute.getSchemaTypeName());
-                }
-                QName name =  createQNameTargetNamespace(attType.getQName().getLocalPart() + "_nil");
-                membertype = createNillableUnion(name, attribute.getQName(), attType.getQName());
-            } else {
-                if (attribute.getSchemaType() != null) {
-                    membertype = convertSchemaToCorbaType(attribute.getSchemaType(), attribute.getQName(), 
-                                                      attribute.getSchemaType(), false);
-                } else {
-                    membertype = processPrimitiveType(attribute.getSchemaTypeName());
-                }
-            }
-
-            if (membertype != null) {
-                MemberType member;
-                String memberName = attribute.getQName().getLocalPart();
+    protected MemberType processComplexContentStructChoice(XmlSchemaChoice choice, 
+                                                     QName schematypeName, QName defaultName) 
+        throws Exception {
+        QName choicename = createQNameTargetNamespace(schematypeName.getLocalPart() + "ChoiceType");
+        Union choiceunion = createUnion(choicename, choice,
+                                        defaultName, schematypeName);
 
-                member = new MemberType();
-                member.setName(memberName);
-                member.setIdltype(membertype.getQName());                                       
-                members.add(member);
-            } else {
-                String msg = "Unsupported Attribute Found in CORBA Binding Generation:" 
-                    + attribute.getQName();
-                LOG.log(Level.WARNING, msg.toString());            
-            }
+        String repoId = repoString + choiceunion.getQName().getLocalPart().replace('.', '/')
+            + idlversion;
+        choiceunion.setRepositoryID(repoId);                                
+        
+        MemberType choicemem = new MemberType();
+        choicemem.setName(choiceunion.getQName().getLocalPart() + "_f");
+        choicemem.setIdltype(createQNameCorbaNamespace(choiceunion.getQName().getLocalPart()));          
+        
+        if (!isDuplicate(choiceunion)) {
+            choiceunion.setQName(null);
+            typeMappingType.getStructOrExceptionOrUnion().add(choiceunion);
         }
-
-        return members;
+        
+        return choicemem;
     }
-    
+            
+        
     
     private CorbaTypeImpl createNillableUnion(QName name, QName schemaType, QName membertype) {        
         
@@ -1513,13 +1571,6 @@
         branch.getCase().add(caseType);
         nilUnion.getUnionbranch().add(branch);       
         
-        if (nilUnion != null) {
-            nilUnion.setQName(null);           
-            if (!isDuplicate(nilUnion)) {
-                typeMappingType.getStructOrExceptionOrUnion().add(nilUnion);
-            }
-        }        
-
         return nilUnion;
     }
     
@@ -1527,6 +1578,7 @@
                                               boolean anonymous) throws Exception {
         // NEED TO DO    
         QName name;
+        QName typeName = null;
         QName schematypeName = checkPrefix(complex.getQName());
 
         if (schematypeName == null) {
@@ -1552,16 +1604,25 @@
                     arrayType = convertSchemaToCorbaType(arrayEl.getSchemaType(), 
                                                            arrayEl.getQName(), 
                                                            arrayEl.getSchemaType(), true);
+                    typeName = arrayType.getQName();
                 }
             }
         }
 
+        
         if (arrayEl.isNillable()) {
             QName nilunionname = createQNameTargetNamespace(arrayType.getQName().getLocalPart() + "_nil");
-            arrayType = createNillableUnion(nilunionname, arrayEl.getQName(), arrayType.getQName());
-
+            arrayType = createNillableUnion(nilunionname, arrayEl.getQName(), 
+                            arrayType.getQName());
+            typeName = createQNameCorbaNamespace(arrayType.getQName().getLocalPart());
+            if (arrayType != null) {
+                arrayType.setQName(null);           
+                if (!isDuplicate(arrayType)) {
+                    typeMappingType.getStructOrExceptionOrUnion().add(arrayType);
+                }
+            }
         }
-
+        
         Long maxOccurs = null;
         Long minOccurs = null;
         if (arrayEl != null) {
@@ -1570,7 +1631,7 @@
         }
         
         return createArray(name, schematypeName, 
-                           checkPrefix(arrayType.getQName()), maxOccurs, minOccurs, anonymous);     
+                           checkPrefix(typeName), maxOccurs, minOccurs, anonymous);     
     }
     
     private CorbaTypeImpl processOMGUnion(XmlSchemaComplexType complex, QName defaultName) throws Exception {
@@ -1650,7 +1711,7 @@
             }
         }
 
-        processUnionBranches(corbaUnion, fields, caselist);
+        wsdltypes.processUnionBranches(corbaUnion, fields, caselist);
 
         return corbaUnion;
     }           
@@ -1694,69 +1755,13 @@
             caselist.add(Integer.toString(i));
         }
 
-        return processUnionBranches(corbaUnion, fields, caselist);
+        return wsdltypes.processUnionBranches(corbaUnion, fields, caselist);
     }
 
     
-    private Union processUnionBranches(Union corbaUnion, List fields, List<String> caselist) {
-        int caseIndex = 0;
-
-        for (int i = 0; i < fields.size(); i++) {
-            MemberType field = (MemberType)fields.get(i);
-            Unionbranch branch = new Unionbranch();
-            branch.setName(field.getName());
-            branch.setIdltype(field.getIdltype());
-            branch.setDefault(false);                         
-
-            CaseType c = new CaseType();
-            c.setLabel((String)caselist.get(caseIndex));
-            caseIndex++;
-            branch.getCase().add(c);
-            corbaUnion.getUnionbranch().add(branch);
-        }
-        return corbaUnion;
-    }    
-    
-    
-    public boolean isOMGUnion(XmlSchemaComplexType type) {
-        boolean isUnion = false;
-
-        if (type.getParticle() instanceof XmlSchemaSequence 
-            && type.getAttributes().getCount() == 0) {
-        
-            XmlSchemaSequence stype = (XmlSchemaSequence)type.getParticle();                
-
-            if (stype.getItems().getCount() == 2) {
-                Iterator it = stype.getItems().getIterator();
-                XmlSchemaParticle st1 = (XmlSchemaParticle)it.next();
-                XmlSchemaParticle st2 = (XmlSchemaParticle)it.next();
-                XmlSchemaElement discEl = null;
-
-                if (st1 instanceof XmlSchemaChoice && st2 instanceof XmlSchemaElement) {
-                    isUnion = true;
-                    discEl = (XmlSchemaElement)st2;
-                } else if (st2 instanceof XmlSchemaChoice && st1 instanceof XmlSchemaElement) {
-                    isUnion = true;
-                    discEl = (XmlSchemaElement)st1;
-                }
-                if (isUnion && !"discriminator".equals(discEl.getQName().getLocalPart())) {
-                    isUnion = false;
-                }                
-            }
-        }
-        return isUnion;
-    }
-        
-    public boolean isUnion(XmlSchemaComplexType type) {
-        boolean isUnion = false;
         
-        if (type.getParticle() instanceof XmlSchemaChoice && type.getAttributes().getCount() == 0) {
-            isUnion = true;
-        }
-
-        return isUnion;
-    }
     
+        
     private boolean isDuplicate(CorbaTypeImpl corbaTypeImpl) {
         String corbaName = corbaTypeImpl.getName();
         String corbaType = corbaTypeImpl.getType().getLocalPart();

Modified: incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLTypes.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLTypes.java?view=diff&rev=442994&r1=442993&r2=442994
==============================================================================
--- incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLTypes.java (original)
+++ incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLTypes.java Wed Sep 13 07:40:53 2006
@@ -20,6 +20,7 @@
 package org.apache.yoko.tools.processors.wsdl;
 
 import java.util.Iterator;
+import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -27,10 +28,19 @@
 
 import org.apache.schemas.yoko.bindings.corba.Anonfixed;
 import org.apache.schemas.yoko.bindings.corba.Anonstring;
+import org.apache.schemas.yoko.bindings.corba.CaseType;
 import org.apache.schemas.yoko.bindings.corba.Fixed;
+import org.apache.schemas.yoko.bindings.corba.MemberType;
 import org.apache.schemas.yoko.bindings.corba.Sequence;
+import org.apache.schemas.yoko.bindings.corba.Union;
+import org.apache.schemas.yoko.bindings.corba.Unionbranch;
+import org.apache.ws.commons.schema.XmlSchemaChoice;
+import org.apache.ws.commons.schema.XmlSchemaComplexType;
+import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaFacet;
 import org.apache.ws.commons.schema.XmlSchemaFractionDigitsFacet;
+import org.apache.ws.commons.schema.XmlSchemaParticle;
+import org.apache.ws.commons.schema.XmlSchemaSequence;
 import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
 import org.apache.ws.commons.schema.XmlSchemaTotalDigitsFacet;
 import org.apache.yoko.tools.common.CORBAConstants;
@@ -44,6 +54,66 @@
 
     public WSDLTypes() {        
     }
+    
+    public Union processUnionBranches(Union corbaUnion, List fields, List<String> caselist) {
+        int caseIndex = 0;
+
+        for (int i = 0; i < fields.size(); i++) {
+            MemberType field = (MemberType)fields.get(i);
+            Unionbranch branch = new Unionbranch();
+            branch.setName(field.getName());
+            branch.setIdltype(field.getIdltype());
+            branch.setDefault(false);                         
+
+            CaseType c = new CaseType();
+            c.setLabel((String)caselist.get(caseIndex));
+            caseIndex++;
+            branch.getCase().add(c);
+            corbaUnion.getUnionbranch().add(branch);
+        }
+        return corbaUnion;
+    }    
+
+    
+    public boolean isOMGUnion(XmlSchemaComplexType type) {
+        boolean isUnion = false;
+
+        if (type.getParticle() instanceof XmlSchemaSequence 
+            && type.getAttributes().getCount() == 0) {
+        
+            XmlSchemaSequence stype = (XmlSchemaSequence)type.getParticle();                
+
+            if (stype.getItems().getCount() == 2) {
+                Iterator it = stype.getItems().getIterator();
+                XmlSchemaParticle st1 = (XmlSchemaParticle)it.next();
+                XmlSchemaParticle st2 = (XmlSchemaParticle)it.next();
+                XmlSchemaElement discEl = null;
+
+                if (st1 instanceof XmlSchemaChoice && st2 instanceof XmlSchemaElement) {
+                    isUnion = true;
+                    discEl = (XmlSchemaElement)st2;
+                } else if (st2 instanceof XmlSchemaChoice && st1 instanceof XmlSchemaElement) {
+                    isUnion = true;
+                    discEl = (XmlSchemaElement)st1;
+                }
+                if (isUnion && !"discriminator".equals(discEl.getQName().getLocalPart())) {
+                    isUnion = false;
+                }                
+            }
+        }
+        return isUnion;
+    }
+        
+    public boolean isUnion(XmlSchemaComplexType type) {
+        boolean isUnion = false;
+        
+        if (type.getParticle() instanceof XmlSchemaChoice && type.getAttributes().getCount() == 0) {
+            isUnion = true;
+        }
+
+        return isUnion;
+    }
+
     
     public CorbaTypeImpl processStringType(CorbaTypeImpl corbaTypeImpl, QName name, 
                                            String maxLength, String length) throws Exception {

Modified: incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTypeTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTypeTest.java?view=diff&rev=442994&r1=442993&r2=442994
==============================================================================
--- incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTypeTest.java (original)
+++ incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTypeTest.java Wed Sep 13 07:40:53 2006
@@ -39,6 +39,7 @@
 import org.apache.schemas.yoko.bindings.corba.Struct;
 import org.apache.schemas.yoko.bindings.corba.TypeMappingType;
 import org.apache.schemas.yoko.bindings.corba.Union;
+import org.apache.schemas.yoko.bindings.corba.Unionbranch;
 import org.apache.yoko.tools.common.WSDLCorbaFactory;
 import org.apache.yoko.tools.processors.wsdl.WSDLToCorbaBinding;
 import org.apache.yoko.tools.processors.wsdl.WSDLToIDLAction;
@@ -83,6 +84,54 @@
         return null;
     }
 
+    
+    // tests Type Inheritance and attributes.
+    public void testTypeInheritance() throws Exception {
+        
+        try {
+            String fileName = getClass().getResource("/wsdl/TypeInheritance.wsdl").toString();
+            generator.setWsdlFile(fileName);
+            generator.addInterfaceName("TypeInheritancePortType");
+
+            Definition model = generator.generateCORBABinding();
+            Document document = writer.getDocument(model);
+
+            Element typemap = getElementNode(document, "corba:typeMapping");            
+            assertNotNull(typemap);
+            assertEquals(3, typemap.getElementsByTagName("corba:union").getLength());            
+            assertEquals(1, typemap.getElementsByTagName("corba:anonstring").getLength());            
+            assertEquals(17, typemap.getElementsByTagName("corba:struct").getLength());            
+            
+            TypeMappingType mapType = (TypeMappingType)model.getExtensibilityElements().get(0);            
+
+            WSDLToIDLAction idlgen = new WSDLToIDLAction();
+            idlgen.setBindingName("TypeInheritanceCORBABinding");
+            idlgen.setOutputFile("typeInherit.idl");
+            idlgen.generateIDL(model);
+
+            Anonstring str = (Anonstring)mapType.getStructOrExceptionOrUnion().get(6);
+            assertEquals("Name is incorrect for AnonString Type", "attrib2Type", 
+                         str.getName());
+            assertEquals("Type is incorrect for AnonString Type", "string", 
+                         str.getType().getLocalPart());            
+
+            Union un = (Union)mapType.getStructOrExceptionOrUnion().get(7);
+            assertEquals("Name is incorrect for Union Type", "attrib2Type_nil", 
+                         un.getName());
+            assertEquals("Type is incorrect for Union Type", "attrib2", 
+                         un.getType().getLocalPart());
+            Unionbranch unbranch = un.getUnionbranch().get(0);
+            assertEquals("Name is incorrect for UnionBranch Type", "value", 
+                         unbranch.getName());
+            assertEquals("Type is incorrect for UnionBranch Type", "attrib2Type", 
+                         unbranch.getIdltype().getLocalPart());
+
+            File f = new File("typeInherit.idl");
+            assertTrue("typeInherit.idl should be generated", f.exists()); 
+        } finally {
+            new File("typeInherit.idl").deleteOnExit();
+        }
+    }    
     
     // tests anonymous strings and fixed types.
     public void testAnonFixedType() throws Exception {

Modified: incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToIDLGenerationTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToIDLGenerationTest.java?view=diff&rev=442994&r1=442993&r2=442994
==============================================================================
--- incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToIDLGenerationTest.java (original)
+++ incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToIDLGenerationTest.java Wed Sep 13 07:40:53 2006
@@ -388,5 +388,25 @@
         }
     }
 
-    
+
+    public void testTypeInheritanceIdlgen() throws Exception {
+        
+        try {
+            String fileName = getClass().getResource("/idlgen/TypeInheritance.wsdl").toString();
+            idlgen.setWsdlFile(fileName);
+            
+            idlgen.setBindingName("TypeInheritanceInterfaceCORBABinding");
+            idlgen.setOutputFile("typeInheritance.idl");            
+            idlgen.setOutput(new PrintWriter(idloutput));
+            idlgen.generateIDL(null);
+
+            InputStream origstream = getClass().getResourceAsStream("/idlgen/expected_typeInheritance.idl");
+            byte orig[] = inputStreamToBytes(origstream);
+
+            checkIDLStrings(orig, idloutput.toByteArray());
+        } finally {
+            new File("typeInheritance.idl").deleteOnExit();
+        }
+    }
+
 }

Added: incubator/yoko/trunk/tools/src/test/resources/idlgen/TypeInheritance.wsdl
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/resources/idlgen/TypeInheritance.wsdl?view=auto&rev=442994
==============================================================================
--- incubator/yoko/trunk/tools/src/test/resources/idlgen/TypeInheritance.wsdl (added)
+++ incubator/yoko/trunk/tools/src/test/resources/idlgen/TypeInheritance.wsdl Wed Sep 13 07:40:53 2006
@@ -0,0 +1,292 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="SoapInteropCompound" targetNamespace="http://soapinterop.org/" xmlns:typens="http://soapinterop.org/xsd" xmlns:corba="http://schemas.apache.org/yoko/bindings/corba" xmlns:ns1="http://soapinterop.org/corba/typemap/" xmlns:wsdlns="http://soapinterop.org/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/">
+  <corba:typeMapping targetNamespace="http://soapinterop.org/corba/typemap/">
+    <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type5SequenceStruct:1.0" type="typens:Type5" name="Type5SequenceStruct">
+      <corba:member name="varInt" idltype="corba:long" />
+      <corba:member name="varString" idltype="corba:string" />
+    </corba:struct>
+      <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type5:1.0" type="typens:Type5" name="Type5">
+        <corba:member name="varFloat" idltype="corba:float" />
+        <corba:member name="Type5SequenceStruct_f" idltype="typens:Type5SequenceStruct" />
+      </corba:struct>
+        <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type4AllStruct:1.0" type="typens:Type4" name="Type4AllStruct">
+          <corba:member name="varStringExt" idltype="corba:string" />
+          <corba:member name="varFloatExt" idltype="corba:float" />
+        </corba:struct>
+          <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type4:1.0" type="typens:Type4" name="Type4">
+            <corba:member name="anyType_f" idltype="corba:any" />
+            <corba:member name="AttrString" idltype="corba:string" />
+            <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="Type4AllStruct_f" idltype="ns1:Type4AllStruct" />
+          </corba:struct>
+            <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:base:1.0" type="typens:base" name="base">
+              <corba:member name="attr1" idltype="corba:string" />
+              <corba:member name="attr2" idltype="corba:long" />
+              <corba:member name="e1" idltype="corba:long" />
+              <corba:member name="e2" idltype="corba:string" />
+            </corba:struct>
+              <corba:union xmlns:ns3="http://soapinterop.org/xsd" discriminator="corba:boolean" repositoryID="IDL:long_nil:1.0" type="ns3:attrib1" name="long_nil">
+                <corba:unionbranch name="value" idltype="corba:long" default="false">
+                  <corba:case label="TRUE" />
+                </corba:unionbranch>
+                </corba:union>
+                  <corba:anonstring bound="2" type="corba:string" name="attrib2Type" />
+                  <corba:union xmlns:ns3="http://soapinterop.org/xsd" discriminator="corba:boolean" repositoryID="IDL:attrib2Type_nil:1.0" type="ns3:attrib2" name="attrib2Type_nil">
+                    <corba:unionbranch xmlns:ns1="http://soapinterop.org/corba/typemap/" name="value" idltype="ns1:attrib2Type" default="false">
+                      <corba:case label="TRUE" />
+                    </corba:unionbranch>
+                    </corba:union>
+                      <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type6:1.0" type="typens:Type6" name="Type6">
+                        <corba:member xmlns:xs="http://www.w3.org/2001/XMLSchema" name="_simpleTypeValue" idltype="xs:short" />
+                        <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="attrib1" idltype="ns1:long_nil" />
+                        <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="attrib2" idltype="ns1:attrib2Type_nil" />
+                      </corba:struct>
+                        <corba:union xmlns:typens="http://soapinterop.org/xsd" discriminator="corba:long" repositoryID="IDL:sub2ChoiceType:1.0" type="typens:sub2" name="sub2ChoiceType">
+                          <corba:unionbranch name="e4" idltype="corba:double" default="false">
+                            <corba:case label="0" />
+                          </corba:unionbranch>
+                            <corba:unionbranch name="e6" idltype="corba:double" default="false">
+                              <corba:case label="1" />
+                            </corba:unionbranch>
+                            </corba:union>
+                              <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:sub2:1.0" type="typens:sub2" name="sub2">
+                                <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="base_f" idltype="ns1:base" />
+                                <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="sub2ChoiceType_f" idltype="ns1:sub2ChoiceType" />
+                              </corba:struct>
+                                <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type2SequenceStruct:1.0" type="typens:Type2" name="Type2SequenceStruct">
+                                  <corba:member name="varFloat" idltype="corba:float" />
+                                </corba:struct>
+                                  <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type2:1.0" type="typens:Type2" name="Type2">
+                                    <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="SimpleStruct_f" idltype="ns1:SimpleStruct" />
+                                    <corba:member name="attrString1" idltype="corba:string" />
+                                    <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="Type2SequenceStruct_f" idltype="ns1:Type2SequenceStruct" />
+                                    <corba:member name="attrString2" idltype="corba:string" />
+                                  </corba:struct>
+                                    <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:sub3SequenceStruct:1.0" type="typens:sub3" name="sub3SequenceStruct">
+                                      <corba:member name="e5" idltype="corba:boolean" />
+                                    </corba:struct>
+                                      <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:sub3:1.0" type="typens:sub3" name="sub3">
+                                        <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="sub2_f" idltype="ns1:sub2" />
+                                        <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="sub3SequenceStruct_f" idltype="ns1:sub3SequenceStruct" />
+                                      </corba:struct>
+                                        <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type3:1.0" type="typens:Type3" name="Type3">
+                                          <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="SimpleStruct_f" idltype="ns1:SimpleStruct" />
+                                          <corba:member name="attrString" idltype="corba:string" />
+                                        </corba:struct>
+                                          <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type1SequenceStruct:1.0" type="typens:Type1" name="Type1SequenceStruct">
+                                            <corba:member name="varString" idltype="corba:long" />
+                                            <corba:member name="varFloat" idltype="corba:float" />
+                                          </corba:struct>
+                                            <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:Type1:1.0" type="typens:Type1" name="Type1">
+                                              <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="SimpleStruct_f" idltype="ns1:SimpleStruct" />
+                                              <corba:member name="attrString" idltype="corba:string" />
+                                              <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="Type1SequenceStruct_f" idltype="ns1:Type1SequenceStruct" />
+                                            </corba:struct>
+                                              <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:SimpleStruct:1.0" type="typens:SimpleStruct" name="SimpleStruct">
+                                                <corba:member name="varFloat" idltype="corba:float" />
+                                                <corba:member name="varInt" idltype="corba:long" />
+                                                <corba:member name="varString" idltype="corba:string" />
+                                              </corba:struct>
+                                                <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:sub1SequenceStruct:1.0" type="typens:sub1" name="sub1SequenceStruct">
+                                                  <corba:member name="e3" idltype="corba:float" />
+                                                </corba:struct>
+                                                  <corba:struct xmlns:typens="http://soapinterop.org/xsd" repositoryID="IDL:sub1:1.0" type="typens:sub1" name="sub1">
+                                                    <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="base_f" idltype="ns1:base" />
+                                                    <corba:member xmlns:ns1="http://soapinterop.org/corba/typemap/" name="sub1SequenceStruct_f" idltype="ns1:sub1SequenceStruct" />
+                                                  </corba:struct>
+                                                  </corba:typeMapping>
+  <types>
+    <schema elementFormDefault="qualified" targetNamespace="http://soapinterop.org/xsd" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+            <element name="in_obj" type="typens:base"/>
+            <element name="result_obj" type="typens:base"/>
+            <element name="in_obj2" type="typens:sub1"/>
+            <element name="result_obj2" type="typens:sub2"/>
+            <element name="in_obj3" type="typens:sub3"/>
+            <element name="result_obj3" type="typens:sub2"/>
+
+            <complexType name="base">
+                <sequence>
+                    <element name="e1" type="xsd:int"/>
+                    <element name="e2" type="xsd:string"/>
+                </sequence>
+                <attribute name="attr1" type="xsd:string" use="required"/>
+                <attribute name="attr2" type="xsd:int" use="required"/>
+            </complexType>
+            <complexType name="sub1">
+                <complexContent>
+                    <extension base="typens:base">
+                        <sequence>
+                            <element name="e3" type="xsd:float"/>
+                        </sequence>
+                    </extension>
+                </complexContent>
+            </complexType>
+            <complexType name="sub2">
+
+                <complexContent>
+                    <extension base="typens:base">
+                        <choice>
+                            <element name="e4" type="xsd:double"/>
+                            <element name="e6" type="xsd:double"/>
+                        </choice>
+                    </extension>
+                </complexContent>
+
+            </complexType>
+            <complexType name="sub3">
+                <complexContent>
+                    <extension base="typens:sub2">
+                        <sequence>
+                            <element name="e5" type="xsd:boolean"/>
+                        </sequence>
+                    </extension>
+                </complexContent>
+            </complexType>
+            
+            <complexType name="SimpleStruct">
+                <sequence>
+                    <element name="varFloat" type="xsd:float"/>
+                    <element name="varInt" type="xsd:int"/>
+                    <element name="varString" type="xsd:string"/>
+                </sequence>
+            </complexType>
+
+            <complexType name="Type1">
+                <complexContent>
+                    <extension base="typens:SimpleStruct">
+                        <attribute name="attrString" type="xsd:string" use="required"/>
+                        <sequence>
+                            <element name="varString" type="xsd:int"/>
+                            <element name="varFloat" type="xsd:float"/>
+                        </sequence>
+                    </extension>
+                </complexContent>
+            </complexType>
+
+            <complexType name="Type2">
+                <complexContent>
+                    <extension base="typens:SimpleStruct">
+                        <attribute name="attrString1" type="xsd:string" use="required"/>
+                        <sequence>
+                            <element name="varFloat" type="xsd:float"/>
+                        </sequence>
+                    </extension>
+                </complexContent>
+                <attribute name="attrString2" type="xsd:string" use="required"/>
+            </complexType>
+
+            <complexType name="Type3">
+                <complexContent>
+                    <extension base="typens:SimpleStruct">
+                        <attribute name="attrString" type="xsd:string" use="required"/>
+                    </extension>
+                </complexContent>
+            </complexType>
+
+            <complexType name="Type4">
+                <complexContent mixed="false">
+                    <extension base="xsd:anyType">
+                        <attribute name="AttrString" type="xsd:string" use="required"/>
+                        <all>
+                            <element name="varStringExt" type="xsd:string"/>
+                            <element name="varFloatExt" type="xsd:float"/>
+                        </all>
+                    </extension>
+                </complexContent>
+            </complexType>
+
+            <complexType name="Type5">
+                <sequence>
+                    <element name="varFloat" type="xsd:float"/>
+                    <sequence>
+                        <element name="varInt" type="xsd:int"/>
+                        <element name="varString" type="xsd:string"/>
+                    </sequence>
+                </sequence>
+            </complexType>
+
+            <complexType name="Type6">
+                <simpleContent>
+                    <extension base="xsd:short">
+                        <attribute name="attrib1" type="xsd:int" use="optional"/>
+                    </extension>
+                </simpleContent>
+                <attribute name="attrib2">
+                    <simpleType>
+                        <restriction base="xsd:string">
+                            <maxLength value="2"/>
+                    </restriction>
+                    </simpleType>
+                </attribute>
+            </complexType>
+
+
+
+
+        </schema>
+  </types>
+  <message name="echoObjectResponse">
+    <part name="Result" element="typens:result_obj"/>
+  </message>
+  <message name="echoObject">
+    <part name="x" element="typens:in_obj"/>
+  </message>
+  <message name="echoObject3Response">
+    <part name="Result" element="typens:result_obj3"/>
+  </message>
+  <message name="echoObject2Response">
+    <part name="Result" element="typens:result_obj2"/>
+  </message>
+  <message name="echoObject2">
+    <part name="x" element="typens:in_obj2"/>
+  </message>
+  <message name="echoObject3">
+    <part name="x" element="typens:in_obj3"/>
+  </message>
+  <portType name="TypeInheritancePortType">
+    <operation name="echoObject" parameterOrder="x">
+      <input name="echoObject" message="wsdlns:echoObject"/>
+      <output name="echoObjectResponse" message="wsdlns:echoObjectResponse"/>
+    </operation>
+    <operation name="echoObject2" parameterOrder="x">
+      <input name="echoObject2" message="wsdlns:echoObject2"/>
+      <output name="echoObject2Response" message="wsdlns:echoObject2Response"/>
+    </operation>
+    <operation name="echoObject3" parameterOrder="x">
+      <input name="echoObject3" message="wsdlns:echoObject3"/>
+      <output name="echoObject3Response" message="wsdlns:echoObject3Response"/>
+    </operation>
+  </portType>
+  <binding name="TypeInheritanceCORBABinding" type="wsdlns:TypeInheritancePortType">
+    <corba:binding repositoryID="IDL:TypeInheritancePortType:1.0" />
+    <operation name="echoObject">
+      <corba:operation name="echoObject">
+        <corba:param xmlns:ns1="http://soapinterop.org/corba/typemap/" mode="in" name="x" idltype="ns1:base" />
+        <corba:return xmlns:ns1="http://soapinterop.org/corba/typemap/" name="Result" idltype="ns1:base" />
+      </corba:operation>
+      <input name="echoObject">
+      </input>
+      <output name="echoObjectResponse">
+      </output>
+    </operation>
+    <operation name="echoObject2">
+      <corba:operation name="echoObject2">
+        <corba:param xmlns:ns1="http://soapinterop.org/corba/typemap/" mode="in" name="x" idltype="ns1:sub1" />
+        <corba:return xmlns:ns1="http://soapinterop.org/corba/typemap/" name="Result" idltype="ns1:sub2" />
+      </corba:operation>
+      <input name="echoObject2">
+      </input>
+      <output name="echoObject2Response">
+      </output>
+    </operation>
+    <operation name="echoObject3">
+      <corba:operation name="echoObject3">
+        <corba:param xmlns:ns1="http://soapinterop.org/corba/typemap/" mode="in" name="x" idltype="ns1:sub3" />
+        <corba:return xmlns:ns1="http://soapinterop.org/corba/typemap/" name="Result" idltype="ns1:sub2" />
+      </corba:operation>
+      <input name="echoObject3">
+      </input>
+      <output name="echoObject3Response">
+      </output>
+    </operation>
+  </binding>
+</definitions>

Propchange: incubator/yoko/trunk/tools/src/test/resources/idlgen/TypeInheritance.wsdl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/trunk/tools/src/test/resources/idlgen/TypeInheritance.wsdl
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/yoko/trunk/tools/src/test/resources/idlgen/TypeInheritance.wsdl
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_typeInheritance.idl
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_typeInheritance.idl?view=auto&rev=442994
==============================================================================
--- incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_typeInheritance.idl (added)
+++ incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_typeInheritance.idl Wed Sep 13 07:40:53 2006
@@ -0,0 +1,101 @@
+struct Type5SequenceStruct {
+    long varInt;
+    string varString;
+};
+struct Type5 {
+    float varFloat;
+    Type5SequenceStruct Type5SequenceStruct_f;
+};
+struct Type4AllStruct {
+    string varStringExt;
+    float varFloatExt;
+};
+struct Type4 {
+    any anyType_f;
+    string AttrString;
+    Type4AllStruct Type4AllStruct_f;
+};
+struct base {
+    string attr1;
+    long attr2;
+    long e1;
+    string e2;
+};
+union long_nil switch(boolean) {
+    case TRUE:
+        long value;
+};
+union attrib2Type_nil switch(boolean) {
+    case TRUE:
+        string<2>  value;
+};
+struct Type6 {
+    short _simpleTypeValue;
+    long_nil attrib1;
+    attrib2Type_nil attrib2;
+};
+union sub2ChoiceType switch(long) {
+    case 0:
+        double e4;
+    case 1:
+        double e6;
+};
+struct sub2 {
+    base base_f;
+    sub2ChoiceType sub2ChoiceType_f;
+};
+struct Type2SequenceStruct {
+    float varFloat;
+};
+struct SimpleStruct {
+    float varFloat;
+    long varInt;
+    string varString;
+};
+struct Type2 {
+    SimpleStruct SimpleStruct_f;
+    string attrString1;
+    Type2SequenceStruct Type2SequenceStruct_f;
+    string attrString2;
+};
+struct sub3SequenceStruct {
+    boolean e5;
+};
+struct sub3 {
+    sub2 sub2_f;
+    sub3SequenceStruct sub3SequenceStruct_f;
+};
+struct Type3 {
+    SimpleStruct SimpleStruct_f;
+    string attrString;
+};
+struct Type1SequenceStruct {
+    long varString;
+    float varFloat;
+};
+struct Type1 {
+    SimpleStruct SimpleStruct_f;
+    string attrString;
+    Type1SequenceStruct Type1SequenceStruct_f;
+};
+struct sub1SequenceStruct {
+    float e3;
+};
+struct sub1 {
+    base base_f;
+    sub1SequenceStruct sub1SequenceStruct_f;
+};
+interface TypeInheritancePortType {
+    ::base
+    echoObject(
+        in ::base x
+    );
+    ::sub2
+    echoObject2(
+        in ::sub1 x
+    );
+    ::sub2
+    echoObject3(
+        in ::sub3 x
+    );
+};

Added: incubator/yoko/trunk/tools/src/test/resources/wsdl/TypeInheritance.wsdl
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/resources/wsdl/TypeInheritance.wsdl?view=auto&rev=442994
==============================================================================
--- incubator/yoko/trunk/tools/src/test/resources/wsdl/TypeInheritance.wsdl (added)
+++ incubator/yoko/trunk/tools/src/test/resources/wsdl/TypeInheritance.wsdl Wed Sep 13 07:40:53 2006
@@ -0,0 +1,173 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="SoapInteropCompound" targetNamespace="http://soapinterop.org/"
+    xmlns="http://schemas.xmlsoap.org/wsdl/"
+    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+    xmlns:typens="http://soapinterop.org/xsd" xmlns:wsdlns="http://soapinterop.org/"
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema">
+    <types>
+        <schema elementFormDefault="qualified"
+            targetNamespace="http://soapinterop.org/xsd"
+            xmlns="http://www.w3.org/2001/XMLSchema"
+            xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+            <element name="in_obj" type="typens:base"/>
+            <element name="result_obj" type="typens:base"/>
+            <element name="in_obj2" type="typens:sub1"/>
+            <element name="result_obj2" type="typens:sub2"/>
+            <element name="in_obj3" type="typens:sub3"/>
+            <element name="result_obj3" type="typens:sub2"/>
+
+            <complexType name="base">
+                <sequence>
+                    <element name="e1" type="xsd:int"/>
+                    <element name="e2" type="xsd:string"/>
+                </sequence>
+                <attribute name="attr1" type="xsd:string" use="required"/>
+                <attribute name="attr2" type="xsd:int" use="required"/>
+            </complexType>
+            <complexType name="sub1">
+                <complexContent>
+                    <extension base="typens:base">
+                        <sequence>
+                            <element name="e3" type="xsd:float"/>
+                        </sequence>
+                    </extension>
+                </complexContent>
+            </complexType>
+            <complexType name="sub2">
+
+                <complexContent>
+                    <extension base="typens:base">
+                        <choice>
+                            <element name="e4" type="xsd:double"/>
+                            <element name="e6" type="xsd:double"/>
+                        </choice>
+                    </extension>
+                </complexContent>
+
+            </complexType>
+            <complexType name="sub3">
+                <complexContent>
+                    <extension base="typens:sub2">
+                        <sequence>
+                            <element name="e5" type="xsd:boolean"/>
+                        </sequence>
+                    </extension>
+                </complexContent>
+            </complexType>
+            
+            <complexType name="SimpleStruct">
+                <sequence>
+                    <element name="varFloat" type="xsd:float"/>
+                    <element name="varInt" type="xsd:int"/>
+                    <element name="varString" type="xsd:string"/>
+                </sequence>
+            </complexType>
+
+            <complexType name="Type1">
+                <complexContent>
+                    <extension base="typens:SimpleStruct">
+                        <attribute name="attrString" type="xsd:string" use="required"/>
+                        <sequence>
+                            <element name="varString" type="xsd:int"/>
+                            <element name="varFloat" type="xsd:float"/>
+                        </sequence>
+                    </extension>
+                </complexContent>
+            </complexType>
+
+            <complexType name="Type2">
+                <complexContent>
+                    <extension base="typens:SimpleStruct">
+                        <attribute name="attrString1" type="xsd:string" use="required"/>
+                        <sequence>
+                            <element name="varFloat" type="xsd:float"/>
+                        </sequence>
+                    </extension>
+                </complexContent>
+                <attribute name="attrString2" type="xsd:string" use="required"/>
+            </complexType>
+
+            <complexType name="Type3">
+                <complexContent>
+                    <extension base="typens:SimpleStruct">
+                        <attribute name="attrString" type="xsd:string" use="required"/>
+                    </extension>
+                </complexContent>
+            </complexType>
+
+            <complexType name="Type4">
+                <complexContent mixed="false">
+                    <extension base="xsd:anyType">
+                        <attribute name="AttrString" type="xsd:string" use="required"/>
+                        <all>
+                            <element name="varStringExt" type="xsd:string"/>
+                            <element name="varFloatExt" type="xsd:float"/>
+                        </all>
+                    </extension>
+                </complexContent>
+            </complexType>
+
+            <complexType name="Type5">
+                <sequence>
+                    <element name="varFloat" type="xsd:float"/>
+                    <sequence>
+                        <element name="varInt" type="xsd:int"/>
+                        <element name="varString" type="xsd:string"/>
+                    </sequence>
+                </sequence>
+            </complexType>
+
+            <complexType name="Type6">
+                <simpleContent>
+                    <extension base="xsd:short">
+                        <attribute name="attrib1" use="optional" type="xsd:int"/>
+                    </extension>
+                </simpleContent>
+                <attribute name="attrib2">
+                    <simpleType>
+                        <restriction base="xsd:string">
+                            <maxLength value="2"/>
+                    </restriction>
+                    </simpleType>
+                </attribute>
+            </complexType>
+
+
+
+
+        </schema>
+    </types>
+    <message name="echoObject">
+        <part element="typens:in_obj" name="x"/>
+    </message>
+    <message name="echoObjectResponse">
+        <part element="typens:result_obj" name="Result"/>
+    </message>
+    <message name="echoObject2">
+        <part element="typens:in_obj2" name="x"/>
+    </message>
+    <message name="echoObject2Response">
+        <part element="typens:result_obj2" name="Result"/>
+    </message>
+    <message name="echoObject3">
+        <part element="typens:in_obj3" name="x"/>
+    </message>
+    <message name="echoObject3Response">
+        <part element="typens:result_obj3" name="Result"/>
+    </message>
+    <portType name="TypeInheritancePortType">
+        <operation name="echoObject" parameterOrder="x">
+            <input message="wsdlns:echoObject" name="echoObject"/>
+            <output message="wsdlns:echoObjectResponse" name="echoObjectResponse"/>
+        </operation>
+        <operation name="echoObject2" parameterOrder="x">
+            <input message="wsdlns:echoObject2" name="echoObject2"/>
+            <output message="wsdlns:echoObject2Response" name="echoObject2Response"/>
+        </operation>
+        <operation name="echoObject3" parameterOrder="x">
+            <input message="wsdlns:echoObject3" name="echoObject3"/>
+            <output message="wsdlns:echoObject3Response" name="echoObject3Response"/>
+        </operation>
+    </portType>
+    
+</definitions>

Propchange: incubator/yoko/trunk/tools/src/test/resources/wsdl/TypeInheritance.wsdl
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/trunk/tools/src/test/resources/wsdl/TypeInheritance.wsdl
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/yoko/trunk/tools/src/test/resources/wsdl/TypeInheritance.wsdl
------------------------------------------------------------------------------
    svn:mime-type = text/xml