incubator-yoko-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From eno...@apache.org
Subject svn commit: r420932 - in /incubator/yoko/trunk/tools/src: main/java/org/apache/yoko/tools/processors/wsdl/ test/java/org/apache/yoko/tools/processors/ test/resources/idlgen/ test/resources/wsdl/
Date Tue, 11 Jul 2006 17:26:22 GMT
Author: enolan
Date: Tue Jul 11 10:26:21 2006
New Revision: 420932

URL: http://svn.apache.org/viewvc?rev=420932&view=rev
Log:
Adding support for exception types and basic support for ComplexTypes
that contain a sequence of elements.

Added:
    incubator/yoko/trunk/tools/src/test/resources/idlgen/exceptions.wsdl   (with props)
    incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_exceptions.idl
    incubator/yoko/trunk/tools/src/test/resources/wsdl/exceptions.wsdl   (with props)
Modified:
    incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLParameter.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/WSDLToIDLAction.java
    incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTest.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/processors/wsdl/WSDLParameter.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLParameter.java?rev=420932&r1=420931&r2=420932&view=diff
==============================================================================
--- incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLParameter.java (original)
+++ incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLParameter.java Tue Jul 11 10:26:21 2006
@@ -45,7 +45,7 @@
 
     public void processParameters(WSDLToCorbaBinding wsdlToCorbaBinding, Operation operation, Definition def,
                                   List<XmlSchema> xmlSchemaList, List<ParamType> params,
-                                      List<ArgType> returns, boolean simpleOrdering) {
+                                      List<ArgType> returns, boolean simpleOrdering) throws Exception {
     
         
         List<ParamType> inputs = new ArrayList<ParamType>();
@@ -63,7 +63,7 @@
 
     private void processInputParams(WSDLToCorbaBinding wsdlToCorbaBinding, 
                                      Operation operation, List<XmlSchema> xmlSchemaList, 
-                                     List<ParamType> inputs) {
+                                     List<ParamType> inputs) throws Exception {
         
         Input input = operation.getInput();
 
@@ -84,7 +84,7 @@
 
     private void processOutputParams(WSDLToCorbaBinding wsdlToCorbaBinding, Operation operation,
                                       List<XmlSchema> xmlSchemaList, List<ParamType> inputs,
-                                      List<ParamType> outputs) {
+                                      List<ParamType> outputs) throws Exception  {
      
         Output output = operation.getOutput();
 
@@ -195,7 +195,7 @@
     
     
     private static ParamType createParamType(WSDLToCorbaBinding wsdlToCorbaBinding, Part part, String mode,
-                                             XmlSchemaType schemaType) {
+                                             XmlSchemaType schemaType) throws Exception {
 
         CorbaTypeImpl corbaTypeImpl = null;
         ParamType paramtype = new ParamType();
@@ -210,7 +210,7 @@
                 paramtype.setIdltype(corbaTypeImpl.getQName());
             } else {
                 corbaTypeImpl = wsdlToCorbaBinding.convertSchemaToCorbaType(schemaType, part.getTypeName(),
-                                                                            null);
+                                                                            null, false);
                 paramtype.setIdltype(corbaTypeImpl.getQName());
             }
             return paramtype;

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?rev=420932&r1=420931&r2=420932&view=diff
==============================================================================
--- 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 Tue Jul 11 10:26:21 2006
@@ -29,11 +29,14 @@
 import java.util.logging.Logger;
 
 import javax.wsdl.Binding;
+import javax.wsdl.BindingFault;
 import javax.wsdl.BindingInput;
 import javax.wsdl.BindingOperation;
 import javax.wsdl.BindingOutput;
 import javax.wsdl.Definition;
+import javax.wsdl.Fault;
 import javax.wsdl.Operation;
+import javax.wsdl.Part;
 import javax.wsdl.Port;
 import javax.wsdl.PortType;
 import javax.wsdl.WSDLException;
@@ -41,28 +44,46 @@
 import javax.xml.bind.JAXBException;
 import javax.xml.namespace.QName;
 
+import org.apache.schemas.yoko.bindings.corba.Anonarray;
 import org.apache.schemas.yoko.bindings.corba.Anonsequence;
 import org.apache.schemas.yoko.bindings.corba.Anonstring;
 import org.apache.schemas.yoko.bindings.corba.ArgType;
+import org.apache.schemas.yoko.bindings.corba.Array;
 import org.apache.schemas.yoko.bindings.corba.BindingType;
+import org.apache.schemas.yoko.bindings.corba.CaseType;
 import org.apache.schemas.yoko.bindings.corba.Enum;
 import org.apache.schemas.yoko.bindings.corba.Enumerator;
+import org.apache.schemas.yoko.bindings.corba.MemberType;
 import org.apache.schemas.yoko.bindings.corba.OperationType;
 import org.apache.schemas.yoko.bindings.corba.ParamType;
+import org.apache.schemas.yoko.bindings.corba.RaisesType;
 import org.apache.schemas.yoko.bindings.corba.Sequence;
+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.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaAttribute;
+import org.apache.ws.commons.schema.XmlSchemaChoice;
+import org.apache.ws.commons.schema.XmlSchemaComplexContent;
+import org.apache.ws.commons.schema.XmlSchemaComplexContentExtension;
 import org.apache.ws.commons.schema.XmlSchemaComplexType;
 import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaEnumerationFacet;
 import org.apache.ws.commons.schema.XmlSchemaFacet;
 import org.apache.ws.commons.schema.XmlSchemaObjectTable;
+import org.apache.ws.commons.schema.XmlSchemaSequence;
+import org.apache.ws.commons.schema.XmlSchemaSimpleContent;
+import org.apache.ws.commons.schema.XmlSchemaSimpleContentExtension;
+import org.apache.ws.commons.schema.XmlSchemaSimpleContentRestriction;
 import org.apache.ws.commons.schema.XmlSchemaSimpleType;
 import org.apache.ws.commons.schema.XmlSchemaSimpleTypeList;
 import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
 import org.apache.ws.commons.schema.XmlSchemaType;
 import org.apache.yoko.tools.common.CORBAConstants;
 import org.apache.yoko.tools.common.CorbaPrimitiveMap;
+import org.apache.yoko.tools.common.ReferenceConstants;
 import org.apache.yoko.tools.common.W3CConstants;
 import org.apache.yoko.wsdl.CorbaTypeImpl;
 import org.objectweb.celtix.common.logging.LogUtils;
@@ -80,6 +101,7 @@
     static String namespace;
     static String repoString = "IDL:";     
     static boolean verboseOn;        
+    TypeMappingType typeMappingType;
     ExtensionRegistry extReg;
     Definition def;
     
@@ -304,7 +326,7 @@
                 bindingOperation.setBindingOutput(bindingOutput);
             }
             // add Faults
-            /*if (op.getFaults() != null && op.getFaults().size() > 0) {
+            if (op.getFaults() != null && op.getFaults().size() > 0) {
                 Map faults = op.getFaults();
                 Iterator i = faults.values().iterator();               
                 while (i.hasNext()) {
@@ -313,7 +335,7 @@
                     bindingFault.setName(fault.getName());                    
                     bindingOperation.addBindingFault(bindingFault);
                 }               
-            }*/
+            }
             bindingOperation.setOperation(op);
             binding.addBindingOperation(bindingOperation);
         }
@@ -366,7 +388,7 @@
             operationType.setReturn(retType);
         }
 
-        /*Map faults = op.getFaults();
+        Map faults = op.getFaults();
         Iterator i = faults.values().iterator();               
         while (i.hasNext()) {
             Fault fault = (Fault)i.next();
@@ -374,17 +396,17 @@
             CorbaTypeImpl extype = convertFaultToCorbaType(xmlSchemaType, fault);
 
             if (extype != null) {
-                raisestype.setException(extype.getQName());                
+                raisestype.setException(createQNameCorbaNamespace(extype.getName()));                
                 operationType.getRaises().add(raisestype);
             }
-        }*/
+        }
                
         bo.addExtensibilityElement(operationType);
     }
 
-    private void addCorbaTypes(Definition definition) {    
+    private void addCorbaTypes(Definition definition) throws Exception {    
         try {
-            TypeMappingType typeMappingType = (TypeMappingType)extReg
+            typeMappingType = (TypeMappingType)extReg
                 .createExtension(Definition.class, CORBAConstants.NE_CORBA_TYPEMAPPING);
 
             CorbaTypeImpl corbaTypeImpl = null;
@@ -397,7 +419,7 @@
                 Iterator i = objs.getValues();
                 while (i.hasNext()) {                
                     XmlSchemaType type = (XmlSchemaType)i.next();
-                    corbaTypeImpl = convertSchemaToCorbaType(type, null, null);               
+                    corbaTypeImpl = convertSchemaToCorbaType(type, null, null, false);               
                     if (corbaTypeImpl != null 
                         && (getLocalType(corbaTypeImpl.getQName()) == null)) {
                         corbaTypeImpl.setQName(null);
@@ -424,7 +446,7 @@
     }
 
     public CorbaTypeImpl convertSchemaToCorbaType(XmlSchemaType stype, 
-        QName defaultName, XmlSchemaType parent) {
+        QName defaultName, XmlSchemaType parent, boolean anonymous) throws Exception {
         CorbaTypeImpl corbaTypeImpl = null;
 
         // need to determine if its a primitive type.
@@ -433,7 +455,7 @@
         }
 
         if (stype instanceof XmlSchemaComplexType) {            
-            return corbaTypeImpl = processComplexType((XmlSchemaComplexType)stype, defaultName);
+            return corbaTypeImpl = processComplexType((XmlSchemaComplexType)stype, defaultName, anonymous);
         } else if (stype instanceof XmlSchemaSimpleType) {            
             return corbaTypeImpl = processSimpleType((XmlSchemaSimpleType)stype, defaultName);
         }  else if (xmlSchemaType.getElementByName(stype.getQName()) != null) {
@@ -447,26 +469,202 @@
         return corbaTypeImpl;
     }
 
+    private CorbaTypeImpl convertFaultToCorbaType(XmlSchema xmlSchema, Fault fault) throws Exception {
+        org.apache.schemas.yoko.bindings.corba.Exception corbaex = null;
+        XmlSchemaType schemaType = null;
+        String faultName = fault.getMessage().getQName().getLocalPart();
+
+        int pos = faultName.indexOf("_exception.");
+
+        if (pos != -1) {
+            faultName = faultName.substring(pos + 11);
+            faultName = faultName + "Exception";
+        }
+
+        QName name = createQNameCorbaNamespace(faultName);
+        Iterator parts = fault.getMessage().getParts().values().iterator();
+
+        if (parts.hasNext()) {
+            Part part = (Part)parts.next();
+            schemaType = lookUpType(part);
+
+            if (schemaType != null && !isSchemaTypeException(schemaType)) {
+                corbaex = new org.apache.schemas.yoko.bindings.corba.Exception();
+                corbaex.setName(schemaType.getName());
+                corbaex.setQName(schemaType.getQName());
+                CorbaTypeImpl corbaTypeImpl = 
+                    convertSchemaToCorbaType(schemaType, part.getTypeName(), null, false);
+                if (corbaTypeImpl != null) {
+                    MemberType member = new MemberType();
+                    member.setName(corbaTypeImpl.getQName().getLocalPart());
+                    member.setIdltype(corbaTypeImpl.getQName());
+                    corbaex.getMember().add(member);
+                }
+            } else {
+                QName elementName = part.getElementName();
+                QName schematypeName = checkPrefix(schemaType.getQName());
+                corbaex = createCorbaException(name, schematypeName, schemaType, elementName);
+            }
+        } else {            
+            String msgStr = "Fault " + fault.getMessage().getQName().getLocalPart() 
+                 + " INCORRECT_FAULT_MSG.";
+            org.objectweb.celtix.common.i18n.Message msg = 
+                new org.objectweb.celtix.common.i18n.Message(msgStr, LOG);
+            throw new Exception(msg.toString());                           
+        }
+
+        if (corbaex == null) {
+            String msgStr = "Fault " + fault.getMessage().getQName().getLocalPart() 
+                + " UNSUPPORTED_FAULT.";
+            org.objectweb.celtix.common.i18n.Message msg = 
+                new org.objectweb.celtix.common.i18n.Message(msgStr, LOG);
+            throw new Exception(msg.toString());            
+        } else {
+            // Set the repository ID for Exception
+            // add to CorbaTypeMapping
+            String repoId = repoString + corbaex.getName().replace('.', '/') + idlversion;
+            corbaex.setRepositoryID(repoId);
+            CorbaTypeImpl corbaTypeImpl = (CorbaTypeImpl)corbaex;
+            corbaTypeImpl.setQName(null);
+            typeMappingType.getStructOrExceptionOrUnion().add(corbaTypeImpl);
+        }
+
+        return corbaex;
+    }
+
+    private org.apache.schemas.yoko.bindings.corba.Exception createCorbaException(QName name,
+                                                                                  QName schemaTypeName,
+                                                                                  XmlSchemaType stype,
+                                                                                  QName elementName)   
+        throws Exception {
+        org.apache.schemas.yoko.bindings.corba.Exception corbaex = null;
+        XmlSchemaComplexType complex = null;
+
+        if (stype instanceof XmlSchemaComplexType) {
+            complex = (XmlSchemaComplexType)stype;
+            corbaex = new org.apache.schemas.yoko.bindings.corba.Exception();
+            corbaex.setName(name.getLocalPart());
+            corbaex.setQName(schemaTypeName);
+            corbaex.setType(checkPrefix(stype.getQName()));
+            corbaex.setRepositoryID(repoString + "/" + name.getLocalPart() + idlversion);
+            
+            List attributeMembers = processAttributesAsMembers(complex.getAttributes().getIterator());
+            Iterator iterator = attributeMembers.iterator();
+            while (iterator.hasNext()) {
+                MemberType memberType = (MemberType)iterator.next();
+                corbaex.getMember().add(memberType);
+            }            
+            List members = processContainerAsMembers(complex, stype.getQName(), schemaTypeName);
+            Iterator it = members.iterator();
+            while (it.hasNext()) {
+                MemberType memberType = (MemberType)it.next();
+                corbaex.getMember().add(memberType);
+            }            
+        }        
+        return corbaex;
+    }
+    
+    protected List processContainerAsMembers(XmlSchemaComplexType container, QName defaultName,
+                                             QName schemaTypeName) throws Exception {
+        List members = new ArrayList();
+
+        if (container.getParticle() instanceof XmlSchemaSequence) {
+            XmlSchemaSequence sequence = (XmlSchemaSequence)container.getParticle();
+            CorbaTypeImpl memberType = processSequenceType(sequence, defaultName, schemaTypeName);
+            if (memberType instanceof Struct) {
+                Struct str = (Struct)memberType;
+                Iterator iter = str.getMember().iterator();
+                while (iter.hasNext()) {
+                    MemberType member = (MemberType)iter.next();
+                    members.add(member);
+                }
+            }
+        } else if (container.getParticle() instanceof XmlSchemaChoice) {
+            // Need to DO
+            System.out.println("processChoice");
+        } else if (container.getParticle() instanceof XmlSchemaElement) {
+            XmlSchemaElement element = (XmlSchemaElement)container.getParticle();
+            // Need to Do
+            System.out.println("processElement");
+        }
+     
+        return members;
+    }
+    
+    protected CorbaTypeImpl processSequenceType(XmlSchemaSequence seq, 
+                                                QName defaultName, QName schemaTypeName)
+        throws Exception {        
+        CorbaTypeImpl type = null;
+
+        Struct struct = new Struct();
+        struct.setName(schemaTypeName.getLocalPart());
+        struct.setQName(schemaTypeName);
+        struct.setRepositoryID(repoString + schemaTypeName.getLocalPart().replace('.', '/') + idlversion);
+        struct.setType(schemaTypeName);
+
+        Iterator i = seq.getItems().getIterator();
+        Iterator i2 = seq.getItems().getIterator();
+        while (i.hasNext()) {        
+            if (i.next() instanceof XmlSchemaElement) {
+                XmlSchemaElement el = (XmlSchemaElement)i2.next();        
+                org.apache.schemas.yoko.bindings.corba.MemberType membertype = 
+                    new org.apache.schemas.yoko.bindings.corba.MemberType();
+                membertype.setName(el.getName());
+                CorbaTypeImpl corbaTypeImpl = 
+                    convertSchemaToCorbaType(el.getSchemaType(), defaultName, el.getSchemaType(), false);
+                membertype.setIdltype(corbaTypeImpl.getQName());
+                struct.getMember().add(membertype);
+            }
+        }        
+        
+        type = struct;
+        
+        
+        if (!"1".equals(seq.getMaxOccurs()) || !"1".equals(seq.getMinOccurs())) {
+            QName name = createQNameTargetNamespace(type.getQName().getLocalPart() + "Array");           
+            CorbaTypeImpl atype = createArray(name, type.getQName(), type.getQName(),
+                                           seq.getMaxOccurs(), seq.getMinOccurs(), false);
+            if (atype != null) {
+                atype.setQName(null);
+                typeMappingType.getStructOrExceptionOrUnion().add(atype);               
+            }
+        }
+        
+        if (type instanceof Struct) {
+            if (struct.getMember().size() == 0) {               
+                String msgStr =  "Cannot create CORBA Struct" +  struct.getName() 
+                    + "from container with no members";
+                org.objectweb.celtix.common.i18n.Message msg = 
+                    new org.objectweb.celtix.common.i18n.Message(msgStr, LOG);
+                throw new Exception(msg.toString());
+            }
+        }
+                
+        return type;
+    }
+    
     private CorbaTypeImpl processPrimitiveType(QName typeName) {
         QName qName = createQNameXmlSchemaNamespace(typeName.getLocalPart());
         return (CorbaTypeImpl)corbaPrimitiveMap.get(qName);
     }
 
-    private CorbaTypeImpl processElementType(XmlSchemaElement stype, QName defaultName) {
-        
+    private CorbaTypeImpl processElementType(XmlSchemaElement stype, QName defaultName) 
+        throws Exception {
+
         QName schematypeName;
 
         if (stype.getName() == null) {
-            schematypeName = defaultName;            
+            schematypeName = defaultName;
         } else {
-            schematypeName = createQNameTargetNamespace(stype.getName());            
+            schematypeName = createQNameTargetNamespace(stype.getName());
         }
 
-        return convertSchemaToCorbaType(stype.getSchemaType(), schematypeName, stype.getSchemaType());
-        
+        return convertSchemaToCorbaType(stype.getSchemaType(), schematypeName, stype.getSchemaType(), false);
+
     }
-    
-    private CorbaTypeImpl processSimpleType(XmlSchemaSimpleType stype, QName defaultName) {
+
+    private CorbaTypeImpl processSimpleType(XmlSchemaSimpleType stype, QName defaultName)
+        throws Exception {
 
         CorbaTypeImpl corbaTypeImpl = null;
         QName name;
@@ -482,37 +680,35 @@
 
         if (stype.getContent() instanceof XmlSchemaSimpleTypeRestriction) {
             // checks if enumeration
-            XmlSchemaSimpleTypeRestriction restrictionType = 
-                (XmlSchemaSimpleTypeRestriction)stype.getContent();
+            XmlSchemaSimpleTypeRestriction restrictionType = (XmlSchemaSimpleTypeRestriction)stype
+                .getContent();
             if (isEnumeration(restrictionType)) {
                 corbaTypeImpl = createCorbaEnum(restrictionType, name, schematypeName);
             } else {
-                if (restrictionType.getBaseType() != null) {              
-                    corbaTypeImpl = 
-                        convertSchemaToCorbaType(restrictionType.getBaseType(), schematypeName, stype);
+                if (restrictionType.getBaseType() != null) {
+                    corbaTypeImpl = convertSchemaToCorbaType(restrictionType.getBaseType(), schematypeName,
+                                                             stype, false);
                 } else {
                     corbaTypeImpl = (CorbaTypeImpl)corbaPrimitiveMap.get(restrictionType.getBaseTypeName());
                 }
 
                 String maxLength = null;
                 String length = null;
- 
+
                 Iterator i = restrictionType.getFacets().getIterator();
                 while (i.hasNext()) {
                     XmlSchemaFacet val = (XmlSchemaFacet)i.next();
                     if (val.getValue().toString().equals("maxlength")) {
-                        maxLength = val.getValue().toString();                        
+                        maxLength = val.getValue().toString();
                     }
                     if (val.getValue().toString().equals("length")) {
                         length = val.getValue().toString();
                     }
                 }
 
-                QName baseName = restrictionType.getBaseTypeName(); 
-                if ((corbaTypeImpl != null 
-                    && corbaTypeImpl.getType().equals(W3CConstants.NT_SCHEMA_STRING)) 
-                    || (baseName.equals(W3CConstants.NT_SCHEMA_STRING))) {                    
-                    //&& corbaTypeImpl.getType().equals(W3CConstants.NT_SCHEMA_STRING)) {                     
+                QName baseName = restrictionType.getBaseTypeName();
+                if ((corbaTypeImpl != null && corbaTypeImpl.getType().equals(W3CConstants.NT_SCHEMA_STRING))
+                    || (baseName.equals(W3CConstants.NT_SCHEMA_STRING))) {
                     boolean boundedString = true;
                     int bound = 0;
 
@@ -543,33 +739,33 @@
             XmlSchemaSimpleTypeList ltype = (XmlSchemaSimpleTypeList)stype.getContent();
             CorbaTypeImpl itemType = null;
             if (ltype.getItemType() != null) {
-                itemType = convertSchemaToCorbaType(ltype.getItemType(), name, stype);
-                if (itemType !=  null) {
+                itemType = convertSchemaToCorbaType(ltype.getItemType(), name, stype, false);
+                if (itemType != null) {
                     return mapToSequence(name, schematypeName, itemType.getQName(), 0, false);
                 }
                 return itemType;
-            }           
+            }
             QName ltypeName = createQNameXmlSchemaNamespace(ltype.getItemTypeName().getLocalPart());
-            itemType = (CorbaTypeImpl)corbaPrimitiveMap.get(ltypeName);            
+            itemType = (CorbaTypeImpl)corbaPrimitiveMap.get(ltypeName);
             return mapToSequence(name, schematypeName, itemType.getQName(), 0, false);
         } else if (stype.getContent() == null) {
             // elements primitive type
             QName stypeName = createQNameXmlSchemaNamespace(stype.getName());
-            corbaTypeImpl = getLocalType(stypeName);                       
+            corbaTypeImpl = getLocalType(stypeName);
         } else {
             System.out.println("SimpleType Union Not Supported in CORBA Binding");
         }
         return corbaTypeImpl;
 
     }
-    
+
     private CorbaTypeImpl getLocalType(QName qname) {
-        return processPrimitiveType(qname);        
+        return processPrimitiveType(qname);
     }
-    
-    private Enum createCorbaEnum(XmlSchemaSimpleTypeRestriction restrictionType, QName name, 
-                                      QName schematypeName) {
-        Enum corbaEnum = new Enum();                
+
+    private Enum createCorbaEnum(XmlSchemaSimpleTypeRestriction restrictionType, QName name,
+                                 QName schematypeName) {
+        Enum corbaEnum = new Enum();
         corbaEnum.setType(schematypeName);
         corbaEnum.setName(name.getLocalPart());
         corbaEnum.setQName(name);
@@ -588,8 +784,8 @@
 
     private boolean isEnumeration(XmlSchemaSimpleTypeRestriction restriction) {
 
-        if ((restriction == null) 
-            || (restriction.getFacets().getCount() == 0) || (restriction.getBaseTypeName() == null)) {
+        if ((restriction == null) || (restriction.getFacets().getCount() == 0)
+            || (restriction.getBaseTypeName() == null)) {
             return false;
         }
 
@@ -602,7 +798,127 @@
         }
         return false;
     }
+
     
+    private XmlSchemaType lookUpType(Part part) {
+        XmlSchemaType schemaType = null;
+        
+        Iterator i = xmlSchemaList.iterator();
+        while (i.hasNext()) {
+            XmlSchema xmlSchema = (XmlSchema)i.next();
+        
+            if (part.getElementName() != null) {
+                XmlSchemaElement schemaElement = xmlSchema.getElementByName(part.getElementName());
+                if (schemaElement != null) {
+                    schemaType = schemaElement.getSchemaType();
+                }
+            } else {
+                if (part.getTypeName() != null) {
+                    schemaType = xmlSchema.getTypeByName(part.getTypeName());
+                }
+            }
+            if (schemaType != null) {
+                return schemaType;
+            }
+        }
+            
+        return schemaType;
+    }
+    
+    private boolean isSchemaTypeException(XmlSchemaType stype) {
+        boolean exception = false;
+        XmlSchemaComplexType complex = null;
+
+        if (stype instanceof XmlSchemaComplexType) {           
+            complex = (XmlSchemaComplexType)stype;
+
+            if (!isLiteralArray(complex))  { 
+                //|| !complex.isOMGUnion()) {
+                exception = true;
+            }
+        }         
+        return exception;
+    }
+
+    
+    public boolean isLiteralArray(XmlSchemaComplexType type) {
+        boolean array = false;
+
+        if ((type.getAttributes().getCount() == 0) 
+            && (type.getParticle() instanceof XmlSchemaSequence)) {
+            XmlSchemaSequence stype = (XmlSchemaSequence)type.getParticle();
+                    
+            if (stype.getItems().getCount() == 1) {
+                if (stype.getItems().getIterator().next() 
+                    instanceof XmlSchemaElement) {   
+                    XmlSchemaElement el = (XmlSchemaElement)stype.getItems().getIterator().next();
+                    if (!"1".equals(el.getMaxOccurs())) {
+                        //it's a literal array
+                        array = true;
+                    }
+                }                
+            }
+        }
+        return array;
+    }
+    
+    /**
+     * Create a CORBA Array or Sequence based on min and max Occurs
+     * If minOccurs == maxOccurs == 1 then log warning and return null.
+     * Else if minOccurs is equal to maxOccurs then create an Array.
+     * Else create a Sequence
+     */
+    protected CorbaTypeImpl createArray(QName name, QName schematypeName, QName arrayType,
+                                        Long maxOccurs, Long minOccurs, boolean anonymous) {
+        if (maxOccurs.equals("unbounded")) {
+            return mapToSequence(name, schematypeName, arrayType, 0, anonymous);
+        }
+        
+        int min = minOccurs.intValue();
+        int max = maxOccurs.intValue();
+
+        if (min == max) {
+            if (max == 1) {
+                String msg = "Couldn't Map to Array:" + name + ":minOccurs=" 
+                    + minOccurs + ":maxOccurs=" + maxOccurs;
+                LOG.log(Level.WARNING, msg.toString());
+                return null;
+            } else {
+                return mapToArray(name, schematypeName, arrayType, max, anonymous);
+            }
+        } else {
+            return mapToSequence(name, schematypeName, arrayType, max, anonymous);
+        }
+    }
+
+    private CorbaTypeImpl mapToArray(QName name, QName schematypeName, QName arrayType, int bound,
+                                 boolean anonymous) {
+        CorbaTypeImpl corbatype = null;
+
+        if (!anonymous) {
+            //Create an Array
+            Array corbaArray = new Array();
+            corbaArray.setName(name.getLocalPart());
+            corbaArray.setType(schematypeName);
+            corbaArray.setElemtype(arrayType);
+            corbaArray.setBound(bound);
+            corbaArray.setRepositoryID(repoString + name.getLocalPart().replace('.', '/') + idlversion);
+            corbaArray.setQName(name);            
+            corbatype = corbaArray;
+        } else {
+            //Create an Array
+            Anonarray corbaArray = new Anonarray();
+            corbaArray.setName(name.getLocalPart());
+            corbaArray.setType(schematypeName);            
+            corbaArray.setElemtype(arrayType);
+            corbaArray.setBound(bound);
+            corbaArray.setQName(name);                        
+            corbatype = corbaArray;
+        }
+        return corbatype;
+    }
+
+
     private CorbaTypeImpl mapToSequence(QName name, QName schematypeName, QName arrayType, int bound,
                                         boolean anonymous) {
         CorbaTypeImpl corbaTypeImpl = null;
@@ -629,16 +945,228 @@
             corbaTypeImpl = corbaSeq;
         }
         return corbaTypeImpl;
-    } 
+    }
 
-    private CorbaTypeImpl processComplexType(XmlSchemaComplexType stype, QName defaultName) {        
+    private CorbaTypeImpl processComplexType(XmlSchemaComplexType complex, QName defaultName, 
+                                             boolean anonymous) throws Exception {
+        CorbaTypeImpl corbatype = new CorbaTypeImpl();
+
+        if (isLiteralArray(complex)) {
+            corbatype = processLiteralArray(complex, defaultName, anonymous);
+        } else if (complex.getQName() != null && isIDLObjectType(complex.getQName())) {
+            // process it.
+        } else {
+            // Deal the ComplexType as Struct
+            corbatype = processStruct(complex, defaultName);
+        }
+
+        return corbatype;
+    }
+
+    private CorbaTypeImpl processStruct(XmlSchemaComplexType complex, QName defaultName)
+        throws Exception {
+        QName name;
+        Struct corbaStruct = null;
+        QName schematypeName = checkPrefix(complex.getQName());               
+
+        if (schematypeName == null) {
+            schematypeName = defaultName;
+            name = createQNameCorbaNamespace(defaultName.getLocalPart() + "Type");
+        } else {
+            name = createQNameCorbaNamespace(schematypeName.getLocalPart());
+        }
+
+        corbaStruct = new Struct();
+        corbaStruct.setName(name.getLocalPart());
+        corbaStruct.setQName(name);
+        String repoId = repoString + name.getLocalPart().replace('.', '/') + idlversion;
+        corbaStruct.setRepositoryID(repoId);        
+        corbaStruct.setType(schematypeName);
+          
+        if (complex.getContentModel() instanceof XmlSchemaSimpleContent) {
+            corbaStruct = processSimpleContentStruct((XmlSchemaSimpleContent)complex.getContentModel(), 
+                                                     defaultName, corbaStruct, schematypeName);
+        } else if (complex.getContentModel() instanceof XmlSchemaComplexContent) {
+            corbaStruct = processComplexContentStruct((XmlSchemaComplexContent)complex.getContentModel(), 
+                                                      defaultName, corbaStruct, schematypeName);        
+        } else {
+            // Process attributes at ComplexType level
+            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);
+            }            
+
+            List members = processContainerAsMembers(complex, defaultName, schematypeName);
+
+            for (Iterator it = members.iterator(); it.hasNext();) {
+                MemberType memberType = (MemberType)it.next();
+                corbaStruct.getMember().add(memberType);
+            }
+        }
+
+        return corbaStruct;
+    }
+    
+    protected Struct processSimpleContentStruct(XmlSchemaSimpleContent simpleContent, 
+                                                QName defaultName, Struct corbaStruct, QName schematypeName)
+        throws Exception {        
+        XmlSchemaType base = null;
+        QName baseName = null;
+        List attrMembers = null;
+        CorbaTypeImpl basetype = null;
+
+        if (simpleContent.getContent() instanceof XmlSchemaSimpleContentExtension) {        
+            XmlSchemaSimpleContentExtension ext = 
+                (XmlSchemaSimpleContentExtension)simpleContent.getContent();
+                        
+            if (ext.getBaseTypeName() != null) {
+                basetype = processPrimitiveType(ext.getBaseTypeName());
+            }
+            
+            // process  ext types ????                      
+            MemberType basemember = new MemberType();
+            basemember.setName("_simpleTypeValue");
+            basemember.setIdltype(basetype.getType());
+            corbaStruct.getMember().add(basemember);
+            attrMembers = processAttributesAsMembers(ext.getAttributes().getIterator());
+        } else if (simpleContent.getContent() instanceof XmlSchemaSimpleContentRestriction) {
+            XmlSchemaSimpleContentRestriction restrict 
+                = (XmlSchemaSimpleContentRestriction)simpleContent.getContent();
+            basetype = convertSchemaToCorbaType(base, base.getQName(), base, false);
+            base = restrict.getBaseType();
+            basetype = convertSchemaToCorbaType(base, base.getQName(), base, false);
+            MemberType basemember = new MemberType();
+            basemember.setName("_simpleTypeValue");
+            basemember.setIdltype(basetype.getType());
+            corbaStruct.getMember().add(basemember);
+            attrMembers = processAttributesAsMembers(restrict.getAttributes().getIterator());
+        }
+
+        //Deal with Attributes defined in Extension
+        MemberType member = new MemberType();
+        for (int i = 0; i < attrMembers.size(); i++) {
+            member = (MemberType)attrMembers.get(i);
+            corbaStruct.getMember().add(member);
+        }
+
+        //Process attributes at ComplexType level
+        //List attlist2 = processAttributesAsMembers(simpleContent.unhandledAttributes.);
+        //corbaStruct.getMembers().addAll(attlist2);      
+
+        return corbaStruct;
+    }
+
+    protected Struct processComplexContentStruct(XmlSchemaComplexContent complex, QName defaultName,
+                                                 Struct corbaStruct, QName schematypeName)
+        throws Exception {        
+
+        if (complex.getContent() instanceof XmlSchemaComplexContentExtension) {
+            XmlSchemaComplexContentExtension extype 
+                = (XmlSchemaComplexContentExtension)complex.getContent();            
+
+        } else {
+            //log.error("Restriction inside ComplexContent is not yet Supported.");
+            return null;
+        }
+
+        return corbaStruct;
+    }
+    
+            
+    protected List processAttributesAsMembers(Iterator attrs) throws Exception {
+        List members = new ArrayList();
+
+        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 = 
+                     convertSchemaToCorbaType(attribute.getSchemaType(), attribute.getQName(), 
+                                              attribute.getSchemaType(), true);
+                QName name =  createQNameTargetNamespace(atttype.getQName().getLocalPart() + "_nil");
+                membertype = createNillableUnion(name, attribute.getQName(), atttype.getQName());
+            } else {
+                membertype = convertSchemaToCorbaType(attribute.getSchemaType(), attribute.getQName(), 
+                                                      attribute.getSchemaType(), false);
+            }
+
+            if (membertype != null) {
+                MemberType member;
+                String memberName = attribute.getQName().getLocalPart();
+
+                if (memberName.equalsIgnoreCase(membertype.getQName().getLocalPart())) {
+                    member = new MemberType();
+                    member.setName(memberName + "_f");
+                    member.setIdltype(membertype.getQName());                    
+                } else {
+                    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());            
+            }
+        }
+
+        return members;
+    }
+    
+    
+    private CorbaTypeImpl createNillableUnion(QName name, QName schemaType, QName membertype) {        
+        
+        Union nilUnion = new Union();
+        nilUnion.setName(name.getLocalPart());
+        nilUnion.setType(schemaType);
+        nilUnion.setQName(name);
+        nilUnion.setDiscriminator(CORBAConstants.NT_CORBA_BOOLEAN);
+        String id = repoString + nilUnion.getQName().getLocalPart().replace('.', '/') + idlversion;
+        nilUnion.setRepositoryID(id);
+
+        Unionbranch branch = new Unionbranch();
+        branch.setName("value");
+        branch.setIdltype(membertype);
+        CaseType caseType = new CaseType();
+        caseType.setLabel("TRUE");
+        branch.getCase().add(caseType);
+        nilUnion.getUnionbranch().add(branch);       
+        
+        if (nilUnion != null) {
+            nilUnion.setQName(null);
+            typeMappingType.getStructOrExceptionOrUnion().add(nilUnion);
+        }        
+
+        return nilUnion;
+    }
+    
+    private CorbaTypeImpl processLiteralArray(XmlSchemaComplexType complex, QName defaultName, 
+                                              boolean anonymous) throws Exception {
         return new CorbaTypeImpl();
     }
+        
+    private QName checkPrefix(QName schematypeName) {
+        
+        QName name = schematypeName;
+        
+        if (name.getPrefix() == null || name.getPrefix().equals("")) {
+            return new QName(name.getNamespaceURI(), name.getLocalPart(), 
+                             def.getPrefix(name.getNamespaceURI()));                        
+        }
+        return name;
+    }
     
     public void setWsdlFile(String file) {
         wsdlFileName = new String(file);
     }
-    
+
     public String getWsdlFileName() {
         return wsdlFileName;
     }
@@ -651,12 +1179,12 @@
 
         idlNamespace = tns + "corba/typemap/";
     }
-    
+
     public String getIdlNamespace() {
         return idlNamespace;
     }
 
-    public void generateNSPrefix(Definition definition, String namespaceURI, String str) {    
+    public void generateNSPrefix(Definition definition, String namespaceURI, String str) {
         String pfx = def.getPrefix(namespaceURI);
 
         if (pfx != null) {
@@ -674,6 +1202,16 @@
         }
         def.addNamespace(pfx, namespaceURI);
     }
+    
+    private boolean isIDLObjectType(QName typeName) {
+        if (typeName.equals(ReferenceConstants.REFERENCE_TYPE)
+            || typeName.equals(ReferenceConstants.WSADDRESSING_TYPE)) {
+            return true;
+        }
+
+        return false;
+    }
+
 
     public QName createQNameCorbaNamespace(String name) {
         return new QName(getIdlNamespace(), name, def.getPrefix(getIdlNamespace()));

Modified: incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToIDLAction.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToIDLAction.java?rev=420932&r1=420931&r2=420932&view=diff
==============================================================================
--- incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToIDLAction.java (original)
+++ incubator/yoko/trunk/tools/src/main/java/org/apache/yoko/tools/processors/wsdl/WSDLToIDLAction.java Tue Jul 11 10:26:21 2006
@@ -41,15 +41,21 @@
 import org.apache.schemas.yoko.bindings.corba.BindingType;
 import org.apache.schemas.yoko.bindings.corba.Enum;
 import org.apache.schemas.yoko.bindings.corba.Enumerator;
+import org.apache.schemas.yoko.bindings.corba.MemberType;
 import org.apache.schemas.yoko.bindings.corba.ParamType;
+import org.apache.schemas.yoko.bindings.corba.RaisesType;
 import org.apache.schemas.yoko.bindings.corba.Sequence;
+import org.apache.schemas.yoko.bindings.corba.Struct;
 import org.apache.schemas.yoko.bindings.corba.TypeMappingType;
+
 import org.apache.yoko.tools.common.CORBAConstants;
 import org.apache.yoko.tools.common.idltypes.CorbaUtils;
 import org.apache.yoko.tools.common.idltypes.IdlAttribute;
 import org.apache.yoko.tools.common.idltypes.IdlDefn;
 import org.apache.yoko.tools.common.idltypes.IdlEnum;
 import org.apache.yoko.tools.common.idltypes.IdlEnumerator;
+import org.apache.yoko.tools.common.idltypes.IdlException;
+import org.apache.yoko.tools.common.idltypes.IdlField;
 import org.apache.yoko.tools.common.idltypes.IdlInterface;
 import org.apache.yoko.tools.common.idltypes.IdlModule;
 import org.apache.yoko.tools.common.idltypes.IdlOperation;
@@ -57,10 +63,12 @@
 import org.apache.yoko.tools.common.idltypes.IdlRoot;
 import org.apache.yoko.tools.common.idltypes.IdlScopeBase;
 import org.apache.yoko.tools.common.idltypes.IdlSequence;
+import org.apache.yoko.tools.common.idltypes.IdlStruct;
 import org.apache.yoko.tools.common.idltypes.IdlType;
 import org.apache.yoko.tools.utils.FileOutputStreamFactory;
 import org.apache.yoko.tools.utils.OutputStreamFactory;
 import org.apache.yoko.wsdl.CorbaTypeImpl;
+
 import org.objectweb.celtix.common.logging.LogUtils;
 import org.objectweb.celtix.wsdl.JAXBExtensionHelper;
 
@@ -78,7 +86,7 @@
     private IdlRoot root = IdlRoot.create();
     private IdlInterface intf;
     private ExtensionRegistry extReg;
-    private WSDLToTypeProcessor typeProcessor = new WSDLToTypeProcessor();
+    private WSDLToTypeProcessor typeProcessor = new WSDLToTypeProcessor(); 
 
     public WSDLToIDLAction() {
     }
@@ -95,8 +103,8 @@
             extReg = def.getExtensionRegistry();
             addExtensions(extReg);
             typeProcessor.setExtensionRegistry(extReg);
-        }
-
+        }       
+        
         Binding binding = findBinding(def);
         if (binding == null) {
             String msgStr = "Binding " + bindingName + " doesn't exists in WSDL.";
@@ -192,7 +200,8 @@
         }
     }
 
-    private void addOperation(BindingOperation bindingOperation, boolean isOneway) {
+    private void addOperation(BindingOperation bindingOperation, boolean isOneway) 
+        throws Exception {
 
         String name = null;
         Iterator i = bindingOperation.getExtensibilityElements().iterator();
@@ -219,11 +228,12 @@
         if (idlDef == null) {
             if (name.startsWith("_get_")) {
                 ArgType t = opType.getReturn();
-                attr = IdlAttribute.create(intf, attrNm, findType(t.getIdltype()), true);
+                attr = IdlAttribute.create(intf, attrNm, 
+                                           findType(t.getIdltype()), true);                               
             } else {
                 Iterator it = opType.getParam().iterator();
-                ParamType arg = (ParamType)it.next();
-                attr = IdlAttribute.create(intf, attrNm, findType(arg.getIdltype()), false);
+                ParamType arg = (ParamType)it.next();                
+                attr = IdlAttribute.create(intf, attrNm, findType(arg.getIdltype()), false);                
             }
             intf.addAttribute(attr);
         } else {
@@ -236,7 +246,7 @@
     }
 
     public void createIdlOperation(org.apache.schemas.yoko.bindings.corba.OperationType opType, String name,
-                                   boolean isOneway) {
+                                   boolean isOneway) throws Exception {
 
         IdlOperation idlOp = IdlOperation.create(intf, opType.getName(), isOneway);
         intf.holdForScope(idlOp);
@@ -244,7 +254,7 @@
         ArgType crt = opType.getReturn();
 
         if (crt != null) {
-            IdlType rt = findType(crt.getIdltype());
+            IdlType rt = findType(crt.getIdltype());            
             idlOp.addReturnType(rt);
         }
 
@@ -252,11 +262,27 @@
 
         while (it.hasNext()) {
             ParamType arg = (ParamType)it.next();
-            IdlType type = findType(arg.getIdltype());
+            IdlType type = findType(arg.getIdltype());            
             String mode = arg.getMode().value();
             IdlParam param = IdlParam.create(idlOp, arg.getName(), type, mode);
             idlOp.addParameter(param);
         }
+        
+        Iterator iter = opType.getRaises().iterator();
+
+        while (iter.hasNext()) {
+            RaisesType rs = (RaisesType)iter.next();
+            IdlType type = findType(rs.getException());            
+
+            if (type instanceof IdlException) {
+                idlOp.addException((IdlException)type);
+            } else {
+                String msgStr = type.fullName() + " is not a type.";
+                org.objectweb.celtix.common.i18n.Message msg = 
+                    new org.objectweb.celtix.common.i18n.Message(msgStr, LOG);
+                throw new Exception(msg.toString());                
+            }
+        }
 
         root.flush();
         intf.promoteHeldToScope();
@@ -265,7 +291,6 @@
     private void getAllIdlTypes() throws Exception {
 
         try {
-
             Iterator types = def.getExtensibilityElements().iterator();
             TypeMappingType typeMappingType = null;            
             if (types != null) {
@@ -275,16 +300,15 @@
             }
             Iterator i = typeMappingType.getStructOrExceptionOrUnion().iterator();
             while (i.hasNext()) {
-                CorbaTypeImpl corbaTypeImpl = (CorbaTypeImpl)i.next();
-                findType(corbaTypeImpl.getType());
+                CorbaTypeImpl corbaTypeImpl = (CorbaTypeImpl)i.next();                                
+                findCorbaIdlType(corbaTypeImpl);
             }
         } catch (Exception ex) {
             ex.printStackTrace();
         }
-
     }
 
-    private CorbaTypeImpl getCorbaType(QName qname) throws Exception {
+    private CorbaTypeImpl getCorbaType(QName qname) throws Exception {    
         CorbaTypeImpl corbaTypeImpl = null;
 
         try {
@@ -298,26 +322,35 @@
             }
             Iterator i = typeMappingType.getStructOrExceptionOrUnion().iterator();
             while (i.hasNext()) {
-                CorbaTypeImpl corbaType = (CorbaTypeImpl)i.next();
-                if (corbaType.getType().equals(qname)) {
+                CorbaTypeImpl corbaType = (CorbaTypeImpl)i.next();                
+                if (corbaType.getType().equals(qname)) {                
                     return corbaType;
                 }
             }
         } catch (Exception ex) {
             ex.printStackTrace();
         }
-        
-        return corbaTypeImpl;
+                
+        return corbaTypeImpl;         
     }
 
-    // ********** need to fix up exception handling
-    private IdlType findType(QName qname) {
-        IdlType idlType = null;
-        String local = qname.getLocalPart();
+    private IdlType findType(QName qname) {        
+        String local = qname.getLocalPart();        
+        return findIdlType(local, qname, null);                
+    }
 
-        if (qname.getNamespaceURI().equals(CORBAConstants.NU_WSDL_CORBA)) {
+    private IdlType findCorbaIdlType(CorbaTypeImpl corbaTypeImpl) {        
+        String local = corbaTypeImpl.getName();        
+        return findIdlType(local, corbaTypeImpl.getType(), corbaTypeImpl);                
+    }
+    
+    private IdlType findIdlType(String local, QName ntype, 
+                                  CorbaTypeImpl corbatypeImpl) {
+        IdlType idlType = null;
+        
+        if (ntype.getNamespaceURI().equals(CORBAConstants.NU_WSDL_CORBA)) {
             try {
-                idlType = createPrimitiveType(qname, local);
+                idlType = createPrimitiveType(ntype, local);
             } catch (Exception ex) {
                 ex.printStackTrace();
             }
@@ -327,8 +360,8 @@
             }
 
             String name[] = unscopeName(local);
-            IdlDefn defn = root.lookup(name);
-
+            IdlDefn defn = root.lookup(name);            
+            
             if (defn != null) {
                 if (defn instanceof IdlType) {
                     return (IdlType)defn;
@@ -339,7 +372,7 @@
                 }
             } else {
                 try {
-                    idlType = createType(qname, name);
+                    idlType = createType(ntype, name, corbatypeImpl);
                 } catch (Exception ex) {
                     ex.printStackTrace();
                 }
@@ -347,7 +380,7 @@
         }
         return idlType;
     }
-
+    
     protected IdlType createPrimitiveType(QName idlType, String name) throws Exception {
         IdlDefn result = root.lookup(name);
 
@@ -368,20 +401,23 @@
         }
         return (IdlType)result;
     }
-
-    protected IdlType createType(QName idlType, String name[]) throws Exception {
+       
+    protected IdlType createType(QName idlType, String name[], CorbaTypeImpl corbaType) throws Exception {
         if (idlType.getLocalPart().equals("Object")) {
             return IdlInterface.create(null, idlType.getLocalPart());
+        }        
+            
+        CorbaTypeImpl  corbaTypeImpl = corbaType;
+        if (corbaTypeImpl == null) {
+            corbaTypeImpl = getCorbaType(idlType);
         }
-
-        CorbaTypeImpl corbaTypeImpl = getCorbaType(idlType);
-
+        
         if (corbaTypeImpl == null) {
             // MessageDef msg = WSDLToCorbaMessages.IDL_TYPE_NOT_FOUND;
             // throw new Exception(msg.getLocalMessage(new Object[] { idlType
             // }));
         }
-
+        
         IdlScopeBase scope = root;
         String dotScopedName = "";
 
@@ -396,15 +432,15 @@
                 // For example if type is a.b.c and we are about to create
                 // module b,look to see if a.b
                 // is an interface that needs to be processed
-                QName qname = new QName(idlType.getNamespaceURI(), dotScopedName);
+                QName qname = new QName(corbaTypeImpl.getType().getNamespaceURI(), dotScopedName);
 
                 // Check to see if CORBAType exists. If so, create type for it
                 // otherwise
-                // create module for this scope
+                // create module for this scope               
                 CorbaTypeImpl possibleCorbaType = getCorbaType(qname);
 
                 if (possibleCorbaType != null) {
-                    idlDef = findType(qname);
+                    idlDef = findType(qname);                    
                 }
 
                 if (idlDef == null) {
@@ -422,18 +458,90 @@
 
         if (corbaTypeImpl instanceof Enum) {
             result = createEnum(corbaTypeImpl, scope, local);
-        } else {
-            if (corbaTypeImpl instanceof Sequence) {
-                result = createSequence(corbaTypeImpl, scope, local);
-            }
+        } else if (corbaTypeImpl instanceof Sequence) {
+            result = createSequence(corbaTypeImpl, scope, local);
+        } else if (corbaTypeImpl 
+            instanceof org.apache.schemas.yoko.bindings.corba.Exception) {
+            result = createIdlException(corbaTypeImpl, scope, local);
+        } else if (corbaTypeImpl instanceof Struct) {
+            result = createStruct(corbaTypeImpl, scope, local);
+            
         }        
         return result;
     }
 
+
+    private IdlType createIdlException(CorbaTypeImpl ctype, IdlScopeBase scope, String local) {
+        IdlType result = null;
+        org.apache.schemas.yoko.bindings.corba.Exception e = 
+            (org.apache.schemas.yoko.bindings.corba.Exception)ctype;
+
+        Object obj = scope.lookup(local);
+
+        if (obj != null && (obj instanceof IdlException)) {
+            result = (IdlType)obj;
+        } else {
+            IdlException exc = IdlException.create(scope, local);
+            scope.holdForScope(exc);
+
+            Iterator it = e.getMember().iterator();
+
+            while (it.hasNext()) {
+                MemberType m = (MemberType)it.next();
+                QName qname = m.getIdltype();
+                IdlType type = findType(qname);                
+                exc.addToScope(IdlField.create(exc, m.getName(), type));
+            }
+
+            result = exc;
+            scope.promoteHeldToScope();
+        }
+
+        return result;        
+    }
+    
+    private IdlType createStruct(CorbaTypeImpl ctype, IdlScopeBase scope, String local) {
+        Struct s = (Struct)ctype;
+        boolean undefinedCircular = false;
+        IdlStruct struct = IdlStruct.create(scope, local);
+        scope.holdForScope(struct);
+
+        Iterator it = s.getMember().iterator();
+        while (it.hasNext()) {
+            MemberType m = (MemberType)it.next();
+            QName qname = m.getIdltype();
+            IdlType type = findType(qname);            
+            
+            // Ensure that this struct will not be written until 
+            // all of its circular members are defined, unless 
+            // the undefined circular members are of sequence type.
+
+            if (!undefinedCircular && !(type instanceof IdlSequence)) {
+                String mlocal = qname.getLocalPart();
+                String mname[] = unscopeName(mlocal);
+                undefinedCircular = null != root.lookup(mname, true);
+            }
+
+            struct.addToScope(IdlField.create(struct, m.getName(), type));
+        }
+
+        if (undefinedCircular) {
+            scope.parkHeld();
+        } else {
+            scope.promoteHeldToScope();
+            if (struct.isCircular()) {
+                // resolving this struct closed a recursion
+                scope.flush();
+            }
+        }
+        
+        return struct;        
+    }
+    
     private IdlType createSequence(CorbaTypeImpl ctype, IdlScopeBase scope, String local) {
         IdlType idlType = null;
         Sequence s = (Sequence)ctype;
-        IdlType base = findType(s.getElemtype());
+        IdlType base = findType(s.getElemtype());        
         int bound = (int)s.getBound();
         idlType = IdlSequence.create(scope, local, base, bound);
         scope.addToScope(idlType);
@@ -511,7 +619,7 @@
 
         return result;
     }
-
+        
     public void setOutputFile(String file) {
         outputFile = new String(file);
     }

Modified: incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTest.java?rev=420932&r1=420931&r2=420932&view=diff
==============================================================================
--- incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTest.java (original)
+++ incubator/yoko/trunk/tools/src/test/java/org/apache/yoko/tools/processors/WSDLToCorbaBindingTest.java Tue Jul 11 10:26:21 2006
@@ -27,6 +27,7 @@
 import java.util.List;
 
 import javax.wsdl.Binding;
+import javax.wsdl.BindingFault;
 import javax.wsdl.BindingOperation;
 import javax.wsdl.Definition;
 import javax.wsdl.extensions.ExtensibilityElement;
@@ -65,13 +66,60 @@
     }
 
     // next story to add Fault support
-    /*public void testExceptionCORBABindingGeneration() throws Exception {
+    public void testExceptionCORBABindingGeneration() throws Exception {
         WSDLToCorbaBinding generator = new WSDLToCorbaBinding();
         String fileName = getClass().getResource("/wsdl/exceptions.wsdl").toString();
         generator.setWsdlFile(fileName);
         generator.addInterfaceName("TestException.ExceptionTest");
         Definition model = generator.generateCORBABinding();
-    }*/
+        
+        QName bName = new QName("http://schemas.apache.org/idl/exceptions.idl", 
+                                "TestException.ExceptionTestCORBABinding", "tns");
+        Binding binding = model.getBinding(bName);
+        assertNotNull(binding);
+        assertEquals("TestException.ExceptionTestCORBABinding", binding.getQName().getLocalPart());
+        assertEquals("TestException.ExceptionTest", 
+                     binding.getPortType().getQName().getLocalPart());
+        assertEquals(1, binding.getExtensibilityElements().size());
+        assertEquals(1, binding.getBindingOperations().size());
+        
+        Iterator i = binding.getExtensibilityElements().iterator();
+        while (i.hasNext()) {     
+            ExtensibilityElement extElement = (ExtensibilityElement)i.next();
+            if (extElement.getElementType().getLocalPart().equals("binding")) {
+                BindingType bindingType = (BindingType)extElement;
+                assertEquals(bindingType.getRepositoryID(), "IDL:TestException/ExceptionTest:1.0");
+            }
+        }        
+        Iterator j = binding.getBindingOperations().iterator();
+        while (j.hasNext()) {            
+            BindingOperation bindingOperation = (BindingOperation)j.next();
+            assertEquals(1, bindingOperation.getExtensibilityElements().size());
+            assertEquals(bindingOperation.getBindingInput().getName(), "review_data");
+            assertEquals(bindingOperation.getBindingOutput().getName(), "review_dataResponse");
+            
+            Iterator f = bindingOperation.getBindingFaults().values().iterator();
+            while (f.hasNext()) {
+                BindingFault bindingFault = (BindingFault)f.next();
+                assertEquals(bindingFault.getName(), "TestException.BadRecord");
+                bindingFault = (BindingFault)f.next();
+                assertEquals(bindingFault.getName(), "MyException");                
+            }                       
+            Iterator bOp = bindingOperation.getExtensibilityElements().iterator();
+            while (bOp.hasNext()) {     
+                ExtensibilityElement extElement = (ExtensibilityElement)bOp.next();
+                if (extElement.getElementType().getLocalPart().equals("operation")) {
+                    OperationType corbaOpType = (OperationType)extElement;                 
+                    assertEquals(corbaOpType.getName(), "review_data");
+                    assertEquals(1, corbaOpType.getParam().size());
+                    assertEquals(corbaOpType.getRaises().get(0).getException().getLocalPart(), 
+                                 "TestException.BadRecordException");
+                    assertEquals(corbaOpType.getRaises().get(1).getException().getLocalPart(), 
+                        "MyExceptionMessage");                          
+                }
+            }
+        }            
+    }
     
     public void testCORBABindingGeneration() throws Exception {
         WSDLToCorbaBinding generator = new WSDLToCorbaBinding();

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?rev=420932&r1=420931&r2=420932&view=diff
==============================================================================
--- 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 Tue Jul 11 10:26:21 2006
@@ -165,9 +165,31 @@
 
             checkIDLStrings(orig, idloutput.toByteArray());
         } finally {
-            new File("stringtypes.idl").deleteOnExit();
+            new File("integertypes.idl").deleteOnExit();
+        }
+    }
+
+    public void testExceptionIdlgen() throws Exception {
+
+        try {
+            WSDLToIDLAction idlgen = new WSDLToIDLAction();
+            String fileName = getClass().getResource("/idlgen/exceptions.wsdl").toString();
+            idlgen.setWsdlFile(fileName);
+
+            idlgen.setBindingName("TestException.ExceptionTestCORBABinding");
+            idlgen.setOutputFile("exceptiontypes.idl");
+            ByteArrayOutputStream idloutput = new ByteArrayOutputStream();
+            idlgen.setOutput(new PrintWriter(idloutput));
+            idlgen.generateIDL(null);
+
+            InputStream origstream = getClass().getResourceAsStream("/idlgen/expected_exceptions.idl");
+            byte orig[] = inputStreamToBytes(origstream);
+
+            checkIDLStrings(orig, idloutput.toByteArray());
+        } finally {
+            new File("exceptiontypes.idl").deleteOnExit();
         }
-    }          
+    }
     
     /*public void testEnumIdlgen() throws Exception {
         
@@ -191,6 +213,4 @@
         }
     }*/
     
-    
-
 }

Added: incubator/yoko/trunk/tools/src/test/resources/idlgen/exceptions.wsdl
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/resources/idlgen/exceptions.wsdl?rev=420932&view=auto
==============================================================================
--- incubator/yoko/trunk/tools/src/test/resources/idlgen/exceptions.wsdl (added)
+++ incubator/yoko/trunk/tools/src/test/resources/idlgen/exceptions.wsdl Tue Jul 11 10:26:21 2006
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="exceptions.idl" 
+    targetNamespace="http://schemas.apache.org/idl/exceptions.idl" 
+    xmlns:tns="http://schemas.apache.org/idl/exceptions.idl" 
+    xmlns:corbatm="http://schemas.apache.org/bindings/corba/typemap" 
+    xmlns:corba="http://schemas.apache.org/yoko/bindings/corba" 
+    xmlns:ns1="http://schemas.apache.org/idl/exceptions.idl/corba/typemap/" 
+    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
+    xmlns:xsd2="urn:mytypes" 
+    xmlns:xsd1="http://schemas.apache.org/idltypes/exceptions.idl" 
+    xmlns="http://schemas.xmlsoap.org/wsdl/">
+    
+<corba:typeMapping>
+    <corba:struct repositoryID="IDL:TestException/BadRecord:1.0" 
+	      type="xsd1:TestException.BadRecord" name="TestException.BadRecord">
+		    <corba:member name="reason" idltype="corba:string" />
+		    <corba:member name="code" idltype="corba:short" />
+    </corba:struct>
+    <corba:struct repositoryID="IDL:MyExceptionType:1.0" type="xsd2:MyExceptionType" 
+	      name="MyExceptionType">
+		    <corba:member name="message" idltype="corba:string" />
+		    <corba:member name="code" idltype="corba:short" />
+		    <corba:member name="company" idltype="corba:string" />
+    </corba:struct>
+    <corba:exception repositoryID="IDL:TestException/BadRecordException:1.0" 
+	      type="xsd1:TestException.BadRecord" name="TestException.BadRecordException">
+		    <corba:member name="reason" idltype="corba:string" />
+		    <corba:member name="code" idltype="corba:short" />
+    </corba:exception>
+    <corba:exception repositoryID="IDL:MyExceptionMessage:1.0" type="xsd2:MyExceptionType" 
+	      name="MyExceptionMessage">
+		    <corba:member name="message" idltype="corba:string" />
+		    <corba:member name="code" idltype="corba:short" />
+		    <corba:member name="company" idltype="corba:string" />
+   </corba:exception>
+</corba:typeMapping> 
+<types>
+    <schema targetNamespace="http://schemas.apache.org/idltypes/exceptions.idl" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+      <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TestException.BadRecord">
+        <xsd:sequence>
+          <xsd:element name="reason" type="xsd:string"/>
+          <xsd:element name="code" type="xsd:short"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TestException.ExceptionTest.review_data.data" type="xsd:string"/>
+      <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TestException.BadRecord" type="xsd1:TestException.BadRecord"/>
+        <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ExceptionEl" type="xsd2:MyExceptionType"/>
+    </schema>
+    <schema targetNamespace="urn:mytypes" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+          <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MyExceptionType">
+              <xsd:sequence>
+                  <xsd:element name="message" type="xsd:string"/>
+                  <xsd:element name="code" type="xsd:short"/>
+                  <xsd:element name="company" type="xsd:string"/>
+              </xsd:sequence>
+          </xsd:complexType>
+      </schema>
+    <schema targetNamespace="http://schemas.apache.org/idltypes/exceptions.idl" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+      <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TestException.BadRecord">
+        <xsd:sequence>
+          <xsd:element name="reason" type="xsd:string"/>
+          <xsd:element name="code" type="xsd:short"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TestException.ExceptionTest.review_data.data" type="xsd:string"/>
+      <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="TestException.BadRecord" type="xsd1:TestException.BadRecord"/>
+        <xsd:element xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="ExceptionEl" type="xsd2:MyExceptionType"/>
+    </schema>
+    <schema targetNamespace="urn:mytypes" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+          <xsd:complexType xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="MyExceptionType">
+              <xsd:sequence>
+                  <xsd:element name="message" type="xsd:string"/>
+                  <xsd:element name="code" type="xsd:short"/>
+                  <xsd:element name="company" type="xsd:string"/>
+              </xsd:sequence>
+          </xsd:complexType>
+      </schema>
+  </types>
+  <message name="TestException.ExceptionTest.review_data">
+    <part name="data" element="xsd1:TestException.ExceptionTest.review_data.data"/>
+  </message>
+  <message name="MyExceptionMessage">
+    <part name="exception" element="xsd1:ExceptionEl"/>
+  </message>
+  <message name="TestException.ExceptionTest.review_dataResponse">
+  </message>
+  <message name="_exception.TestException.BadRecord">
+    <part name="exception" element="xsd1:TestException.BadRecord"/>
+  </message>
+  <portType name="TestException.ExceptionTest">
+    <operation name="review_data">
+      <input name="review_data" message="tns:TestException.ExceptionTest.review_data"/>
+      <output name="review_dataResponse" message="tns:TestException.ExceptionTest.review_dataResponse"/>
+      <fault name="TestException.BadRecord" message="tns:_exception.TestException.BadRecord"/>
+      <fault name="MyException" message="tns:MyExceptionMessage"/>
+    </operation>
+  </portType>
+  <binding name="TestException.ExceptionTestCORBABinding" type="tns:TestException.ExceptionTest">
+      <corba:binding repositoryID="IDL:TestException/ExceptionTest:1.0" />
+      <operation name="review_data">
+          <corba:operation name="review_data">
+              <corba:param mode="in" name="data" idltype="corba:string" />
+              <corba:raises exception="ns1:TestException.BadRecordException" />
+              <corba:raises exception="ns1:MyExceptionMessage" />
+          </corba:operation> 
+      <input name="review_data">
+      </input>
+      <output name="review_dataResponse">
+      </output>
+      <fault name="TestException.BadRecord">
+      </fault>
+      <fault name="MyException">
+      </fault>
+    </operation>
+  </binding>
+</definitions>

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

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

Added: incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_exceptions.idl
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_exceptions.idl?rev=420932&view=auto
==============================================================================
--- incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_exceptions.idl (added)
+++ incubator/yoko/trunk/tools/src/test/resources/idlgen/expected_exceptions.idl Tue Jul 11 10:26:21 2006
@@ -0,0 +1,29 @@
+module TestException {
+    struct BadRecord {
+        string reason;
+        short code;
+    };
+    exception BadRecordException {
+        string reason;
+        short code;
+    };
+    interface ExceptionTest {
+        void
+        review_data(
+            in string data
+        ) raises(
+            ::TestException::BadRecordException,
+            ::MyExceptionMessage
+        );
+    };
+};
+struct MyExceptionType {
+    string message;
+    short code;
+    string company;
+};
+exception MyExceptionMessage {
+    string message;
+    short code;
+    string company;
+};

Added: incubator/yoko/trunk/tools/src/test/resources/wsdl/exceptions.wsdl
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/tools/src/test/resources/wsdl/exceptions.wsdl?rev=420932&view=auto
==============================================================================
--- incubator/yoko/trunk/tools/src/test/resources/wsdl/exceptions.wsdl (added)
+++ incubator/yoko/trunk/tools/src/test/resources/wsdl/exceptions.wsdl Tue Jul 11 10:26:21 2006
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions name="exceptions.idl"
+ targetNamespace="http://schemas.apache.org/idl/exceptions.idl"
+ xmlns="http://schemas.xmlsoap.org/wsdl/"
+ xmlns:tns="http://schemas.apache.org/idl/exceptions.idl"
+ xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+ xmlns:xsd1="http://schemas.apache.org/idltypes/exceptions.idl"
+ xmlns:xsd2="urn:mytypes"
+ xmlns:corba="http://schemas.apache.org/bindings/corba"
+ xmlns:corbatm="http://schemas.apache.org/bindings/corba/typemap">
+    
+  <types>
+    <schema targetNamespace="http://schemas.apache.org/idltypes/exceptions.idl"
+     xmlns="http://www.w3.org/2001/XMLSchema"
+     xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+      <xsd:complexType name="TestException.BadRecord">
+        <xsd:sequence>
+          <xsd:element name="reason" type="xsd:string"/>
+          <xsd:element name="code" type="xsd:short"/>
+        </xsd:sequence>
+      </xsd:complexType>
+      <xsd:element name="TestException.ExceptionTest.review_data.data" type="xsd:string"/>
+      <xsd:element name="TestException.BadRecord" type="xsd1:TestException.BadRecord"/>
+        <xsd:element name="ExceptionEl" type="xsd2:MyExceptionType"/>
+    </schema>
+      <schema targetNamespace="urn:mytypes"
+          xmlns="http://www.w3.org/2001/XMLSchema"
+          xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
+          <xsd:complexType name="MyExceptionType">
+              <xsd:sequence>
+                  <xsd:element name="message" type="xsd:string"/>
+                  <xsd:element name="code" type="xsd:short"/>
+                  <xsd:element name="company" type="xsd:string"/>
+              </xsd:sequence>
+          </xsd:complexType>
+      </schema>
+  </types>
+  <message name="TestException.ExceptionTest.review_data">
+    <part name="data" element="xsd1:TestException.ExceptionTest.review_data.data"/>
+  </message>
+  <message name="TestException.ExceptionTest.review_dataResponse"/>
+  <message name="_exception.TestException.BadRecord">
+    <part name="exception" element="xsd1:TestException.BadRecord"/>
+  </message>
+    <message name="MyExceptionMessage">
+        <part name="exception" element="xsd1:ExceptionEl"/>
+    </message>
+  <portType name="TestException.ExceptionTest">
+    <operation name="review_data">
+      <input message="tns:TestException.ExceptionTest.review_data" name="review_data"/>
+      <output message="tns:TestException.ExceptionTest.review_dataResponse" name="review_dataResponse"/>
+      <fault message="tns:_exception.TestException.BadRecord" name="TestException.BadRecord"/>
+        <fault message="tns:MyExceptionMessage" name="MyException"/>
+    </operation>
+  </portType>
+</definitions>

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

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



Mime
View raw message