You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by dk...@apache.org on 2006/08/28 20:54:46 UTC

svn commit: r437778 [9/42] - in /incubator/tuscany/java: ./ buildtools/ buildtools/src/main/resources/ das/ das/rdb/ das/rdb/src/main/java/org/apache/tuscany/das/rdb/ das/rdb/src/main/java/org/apache/tuscany/das/rdb/generator/impl/ das/rdb/src/main/jav...

Modified: incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java?rev=437778&r1=437777&r2=437778&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java (original)
+++ incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java Mon Aug 28 11:53:49 2006
@@ -1,550 +1,550 @@
-package org.apache.tuscany.tools.java2wsdl.generate;
-
-import java.io.StringReader;
-import java.lang.reflect.Constructor;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Vector;
-
-import javax.xml.namespace.QName;
-
-import org.apache.tuscany.sdo.util.SDOUtil;
-import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.commons.schema.XmlSchemaAny;
-import org.apache.ws.commons.schema.XmlSchemaAnyAttribute;
-import org.apache.ws.commons.schema.XmlSchemaChoice;
-import org.apache.ws.commons.schema.XmlSchemaCollection;
-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.XmlSchemaContentProcessing;
-import org.apache.ws.commons.schema.XmlSchemaElement;
-import org.apache.ws.commons.schema.XmlSchemaForm;
-import org.apache.ws.commons.schema.XmlSchemaGroupBase;
-import org.apache.ws.commons.schema.XmlSchemaImport;
-import org.apache.ws.commons.schema.XmlSchemaInclude;
-import org.apache.ws.commons.schema.XmlSchemaObject;
-import org.apache.ws.commons.schema.XmlSchemaSequence;
-import org.apache.ws.commons.schema.XmlSchemaSimpleType;
-import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
-import org.apache.ws.commons.schema.XmlSchemaType;
-import org.apache.ws.java2wsdl.Java2WSDLUtils;
-import org.codehaus.jam.JClass;
-import org.codehaus.jam.JProperty;
-
-import commonj.sdo.DataObject;
-import commonj.sdo.Property;
-import commonj.sdo.Type;
-import commonj.sdo.helper.XSDHelper;
-
-public class SchemaBuilder implements TuscanyJava2WSDLConstants
-{
-    public static final String NAME_SPACE_PREFIX        = "stn_";
-    private static int prefixCount                      = 1;
-    
-    public static final String MIXED = "mixed";
-    public static final String GROUP = "group";
-    
-    protected String attrFormDefault = null;
-    protected String elementFormDefault = null;
-    protected XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection();
-    private Hashtable schemaMap = new Hashtable();
-    protected Hashtable targetNamespacePrefixMap = new Hashtable();
-    protected TuscanyTypeTable typeTable = new TuscanyTypeTable();
-    protected Map schemaLocationMap = null;
-    private ClassLoader classLoader;
-    
-    protected SchemaBuilder(XmlSchemaCollection schemaCollection,
-                                                Hashtable schemaMap,
-                                                Hashtable nsPrefixMap,
-                                                TuscanyTypeTable typeTable,
-                                                String attrFormDef,
-                                                String eleFormDef,
-                                                Map schemaLocMap,
-                                                ClassLoader classLoader)
-    {
-        this.schemaMap = schemaMap;
-        this.xmlSchemaCollection = schemaCollection;
-        this.targetNamespacePrefixMap = nsPrefixMap;
-        this.typeTable = typeTable;
-        this.schemaLocationMap = schemaLocMap;
-        this.classLoader = classLoader;
-        this.attrFormDefault = attrFormDef;
-        this.elementFormDefault = eleFormDef;
-    }
-    
-    
-    private boolean isSDO(JClass javaType) throws Exception
-    {
-        Class sdoClass = Class.forName(javaType.getQualifiedName(), true, classLoader);
-        return DataObject.class.isAssignableFrom(sdoClass);
-    }
-    
-    private void buildComplexTypeContents_JavaType(JClass javaType, 
-                                                        XmlSchemaComplexType complexType,
-                                                        XmlSchema xmlSchema ) throws Exception
-    {
-       JProperty [] properties = javaType.getDeclaredProperties();
-       
-       for (int i = 0; i < properties.length; i++) 
-       {
-            JProperty property = properties[i];
-            String propertyName = property.getType().getQualifiedName();
-            boolean isArryType = property.getType().isArrayType();
-            if (isArryType) 
-            {
-                propertyName = property.getType().getArrayComponentType().getQualifiedName();
-            }
-                
-            if (typeTable.isSimpleType(propertyName)) 
-            {
-                XmlSchemaElement elt1 = new XmlSchemaElement();
-                elt1.setName(getCorrectName(property.getSimpleName()));
-                elt1.setSchemaTypeName(typeTable.getSimpleSchemaTypeName(propertyName));
-                ((XmlSchemaGroupBase)complexType.getParticle()).getItems().add(elt1);
-                if (isArryType) 
-                {
-                    elt1.setMaxOccurs(Long.MAX_VALUE);
-                    elt1.setMinOccurs(0);
-                }
-            }
-            else 
-            {
-                QName schemaTypeName = null;
-                if (isArryType) 
-                {
-                    schemaTypeName = generateSchema(property.getType().getArrayComponentType());
-                } 
-                else 
-                {
-                    schemaTypeName = generateSchema(property.getType());
-                }
-                    
-                XmlSchemaElement elt1 = new XmlSchemaElement();
-                elt1.setName(getCorrectName(property.getSimpleName()));
-                elt1.setSchemaTypeName(schemaTypeName);
-                ((XmlSchemaGroupBase)complexType.getParticle()).getItems().add(elt1);
-                
-                if (isArryType) 
-                {
-                    elt1.setMaxOccurs(Long.MAX_VALUE);
-                    elt1.setMinOccurs(0);
-                }
-                
-                addImports(xmlSchema, schemaTypeName);
-            }
-       }
-    }
-    
-    protected QName buildSchema_JavaType(JClass javaType) throws Exception
-    {
-        QName schemaTypeName = typeTable.getComplexSchemaTypeName(javaType);
-        if (  schemaTypeName == null ) 
-        {
-            String simpleName = javaType.getSimpleName();
-    
-            String packageName = javaType.getContainingPackage().getQualifiedName();
-            
-            String targetNameSpace = Java2WSDLUtils.schemaNamespaceFromPackageName(packageName).toString();
-    
-            XmlSchema xmlSchema = getXmlSchema(targetNameSpace);
-            String targetNamespacePrefix = (String) targetNamespacePrefixMap.get(targetNameSpace);
-    
-            schemaTypeName = new QName(targetNameSpace, simpleName, targetNamespacePrefix);
-            XmlSchemaComplexType complexType = new XmlSchemaComplexType(xmlSchema);
-            complexType.setName(simpleName);
-            
-            XmlSchemaSequence sequence = new XmlSchemaSequence();
-            complexType.setParticle(sequence);
-            
-            createGlobalElement(xmlSchema, complexType, schemaTypeName);
-            xmlSchema.getItems().add(complexType);
-            xmlSchema.getSchemaTypes().add(schemaTypeName, complexType);
-            
-            //adding this type to the table
-            //typeTable.addComplexScheam(name, complexType.getQName());
-            typeTable.addComplexSchemaType(targetNameSpace, simpleName, schemaTypeName);
-            buildComplexTypeContents_JavaType(javaType, complexType, xmlSchema);
-        }
-        return schemaTypeName;
-    }
-    
-    
-    protected QName buildSchema_SDO(Type dataType) //throws Exception
-    {
-        QName schemaTypeName = typeTable.getComplexSchemaTypeName(dataType.getURI(), dataType.getName());
-        
-        if ( schemaTypeName == null )
-        {
-            //invoke XSDHelper to generate schema for this sdo type
-            XSDHelper xsdHelper = SDOUtil.createXSDHelper(SDOUtil.createTypeHelper());
-            //it is better to check if XSDHelper can generate the schema
-            if ( xsdHelper.isXSD(dataType) )
-            {
-                //if schemalocations for xsd has been specified, include them
-                includeExtXSD(dataType);
-            }
-            else
-            {
-                List typeList = new Vector();
-                typeList.add(dataType);
-                
-                //the xsdhelper returns a string that contains the schemas for this type
-                String schemaDefns = xsdHelper.generate(typeList, schemaLocationMap);
-                    
-                //extract the schema elements and store them in the schema map
-                extractSchemas(schemaDefns);
-            }
-            //since the XSDHelper will not return the type name, create it and store it in typetable
-            schemaTypeName = new QName(dataType.getURI(), 
-                                        dataType.getName(),
-                                        generatePrefix());
-            typeTable.addComplexSchemaType(dataType.getURI(),
-                                                dataType.getName(),
-                                                schemaTypeName);
-
-        }
-        return schemaTypeName;
-    }
-    
-    
-    public QName generateSchema(JClass javaType) throws Exception
-    {
-        if ( isSDO(javaType) )
-        {
-            Type dataType = createDataObject(javaType).getType();
-            return buildSchema_SDO(dataType);
-        }
-        else
-        {
-            return buildSchema_JavaType(javaType);
-        }
-    }
-    
-    private XmlSchema getXmlSchema(String targetNamespace)  
-    {
-        XmlSchema xmlSchema; 
-        
-        if ((xmlSchema = (XmlSchema) schemaMap.get(targetNamespace)) == null) 
-        {
-            String targetNamespacePrefix = generatePrefix();
-            
-            xmlSchema = new XmlSchema(targetNamespace, xmlSchemaCollection);
-            xmlSchema.setAttributeFormDefault(getAttrFormDefaultSetting());
-            xmlSchema.setElementFormDefault(getElementFormDefaultSetting());
-            
-            targetNamespacePrefixMap.put(targetNamespace, targetNamespacePrefix);
-            schemaMap.put(targetNamespace, xmlSchema);
-            
-            Hashtable prefixmap = new Hashtable();
-            prefixmap.put(TuscanyTypeTable.XS_URI_PREFIX, TuscanyTypeTable.XML_SCHEMA_URI);
-            prefixmap.put(targetNamespacePrefix, targetNamespace);
-            xmlSchema.setPrefixToNamespaceMap(prefixmap);
-        }
-        return xmlSchema;
-    }
-    
-    
-    /**
-     * JAM convert first name of an attribute into UpperCase as an example if
-     * there is a instance variable called foo in a bean , then Jam give that as
-     * Foo so this method is to correct that error
-     *
-     * @param wrongName
-     * @return the right name, using english as the locale for case conversion
-     */
-    public static String getCorrectName(String wrongName) 
-    {
-        if (wrongName.length() > 1) {
-            return wrongName.substring(0, 1).toLowerCase(Locale.ENGLISH)
-                    + wrongName.substring(1, wrongName.length());
-        } else {
-            return wrongName.substring(0, 1).toLowerCase(Locale.ENGLISH);
-        }
-    }
-    
-    private String addImports(XmlSchema xmlSchema, QName schemaTypeName)
-    {
-        String prefix = null;
-        Enumeration enumeration = xmlSchema.getPrefixToNamespaceMap().keys();
-        while ( enumeration.hasMoreElements() )
-        {
-            prefix = (String)enumeration.nextElement();
-            if ( schemaTypeName.getNamespaceURI().equals(
-                    xmlSchema.getPrefixToNamespaceMap().get(prefix)) )
-            {
-                return prefix;
-            }
-        }
-        
-        //the following lines are executed only if a prefix was not found which implies that the 
-        //schemaTypeName was not imported earlier and also it does not belong to the targetnamespace
-        String schemaLocation = null;
-        XmlSchemaImport importElement = new XmlSchemaImport();
-        importElement.setNamespace(schemaTypeName.getNamespaceURI());
-        xmlSchema.getItems().add(importElement);
-        prefix = generatePrefix();
-        xmlSchema.getPrefixToNamespaceMap().put(prefix, schemaTypeName.getNamespaceURI());
-
-        return prefix;
-    }
-    
-    
-    
-    private String formGlobalElementName(String typeName)
-    {
-        String firstChar = typeName.substring(0,1);
-        return typeName.replaceFirst(firstChar, firstChar.toLowerCase());
-    }
-    
-    private void createGlobalElement(XmlSchema xmlSchema, XmlSchemaComplexType complexType, QName elementName )
-    {
-        XmlSchemaElement globalElement = new XmlSchemaElement();
-        globalElement.setSchemaTypeName(complexType.getQName());
-        globalElement.setName(formGlobalElementName(complexType.getName()));
-        globalElement.setQName(elementName);
-        
-        xmlSchema.getItems().add(globalElement);
-        xmlSchema.getElements().add(elementName, globalElement);
-    }
-    
-    private DataObject createDataObject(JClass sdoClass) throws Exception
-    {
-        Class sdoType = Class.forName(sdoClass.getQualifiedName(), true, classLoader);
-        
-        Constructor constructor = sdoType.getDeclaredConstructor(new Class[0]);
-        constructor.setAccessible(true);
-        Object instance = constructor.newInstance(new Object[0]);
-        return (DataObject)instance;
-    }
-    
-    
-    private String generatePrefix() 
-    {
-        return NAME_SPACE_PREFIX + prefixCount++;
-    }
-    
-    private void includeExtXSD(Type dataType)
-    {
-        //now we know there is a type for which the xsd must come from outside
-        //create a schema for the namespace of this type and add an include in it for 
-        //the xsd that is defined externally
-        XmlSchema xmlSchema = getXmlSchema(dataType.getURI());
-        
-        //ideally there could  be more than one external schema defintions for a namespace
-        //and hence schemalocations will be a list of locations
-        //List schemaLocations = (List)schemaLocationMap.get(dataType.getURI());
-        
-        //since as per the specs the input to XSDHelper is a map of <String, String> allowing
-        //only one schemalocation for a namespace.  So for now this single location will be
-        //picked up and put into a list
-        List schemaLocations = new Vector();
-        
-        if ( schemaLocationMap.get(dataType.getURI()) != null )
-        {
-            schemaLocations.add(schemaLocationMap.get(dataType.getURI()));
-        }
-        
-        if ( schemaLocations.size() <= 0 )
-        {
-            schemaLocations.add(DEFAULT_SCHEMA_LOCATION);
-        }
-        
-        Iterator includesIterator = xmlSchema.getIncludes().getIterator();
-        Iterator schemaLocIterator = schemaLocations.iterator();
-        String aSchemaLocation = null;
-        boolean includeExists = false;
-        //include all external schema locations
-        while ( schemaLocIterator.hasNext() )
-        {
-            aSchemaLocation = (String)schemaLocIterator.next();
-            while ( includesIterator.hasNext() )
-            {
-                if ( !includeExists && aSchemaLocation.equals(
-                        ((XmlSchemaInclude)includesIterator.next()).getSchemaLocation() 
-                                           ))
-                {
-                    includeExists = true;
-                }
-            }
-            
-            if ( !includeExists )
-            {
-                XmlSchemaInclude includeElement = new XmlSchemaInclude();
-                includeElement.setSchemaLocation(aSchemaLocation);
-                xmlSchema.getIncludes().add(includeElement);
-                xmlSchema.getItems().add(includeElement);
-            }
-        }
-
-    }
-    
-    private void extractSchemas(String schemaDefns)
-    {
-        //load each schema element and add it to the schema map
-
-        String token = getToken(schemaDefns);
-        int curIndex = schemaDefns.indexOf(token);
-        int nextIndex = schemaDefns.indexOf(token, curIndex + token.length());
-        
-        while ( curIndex != -1 )
-        {
-            StringReader sr =  null;
-            if ( nextIndex != -1 )
-                sr = new StringReader(schemaDefns.substring(curIndex, nextIndex));
-            else
-                sr = new StringReader(schemaDefns.substring(curIndex));
-            
-            XmlSchemaCollection collection = new XmlSchemaCollection();
-            XmlSchema aSchema = collection.read(sr, null);
-            addSchemaToMap(aSchema);
-  
-            curIndex = nextIndex;
-            nextIndex = schemaDefns.indexOf(token, curIndex + token.length());
-        }
-    }
-    
-    private void addSchemaToMap(XmlSchema extractedSchema)
-    {
-        //check if a Schema object already exists in schema map for targetNamespace of this schema element
-        //if it does then copy the contents of this schema element to the existing one, ensuring that 
-        //duplicate elements are not created. i.e. before adding some child element like 'include' or 'import' 
-        //check if it already exists, if it does don't add this
-        XmlSchema existingSchema = (XmlSchema)schemaMap.get(extractedSchema.getTargetNamespace());
-        
-        if ( existingSchema == null )
-        {
-            extractedSchema.setAttributeFormDefault(getAttrFormDefaultSetting());
-            extractedSchema.setElementFormDefault(getElementFormDefaultSetting());
-            schemaMap.put(extractedSchema.getTargetNamespace(), extractedSchema);
-            
-        }
-        else
-        {
-            copySchemaItems(existingSchema, extractedSchema);
-        }
-    }
-    
-    private void copySchemaItems(XmlSchema existingSchema, XmlSchema aSchema)
-    {
-        //items to copy are imports, includes, elements, types ...
-        //each item is checked if it is a duplicate entry and  copied only if it isn't
-        Iterator itemsIterator = aSchema.getItems().getIterator();
-        Object schemaObject = null;
-        XmlSchemaElement schemaElement = null;
-        XmlSchemaType schemaType = null;
-        XmlSchemaInclude schemaInclude = null;
-        QName qName = null;
-        List existingIncludes = getExistingIncludes(existingSchema);
-        
-        while ( itemsIterator.hasNext() )
-        {
-            schemaObject = itemsIterator.next();
-            if ( schemaObject instanceof XmlSchemaElement )
-            {
-                schemaElement = (XmlSchemaElement)schemaObject;
-                qName = schemaElement.getQName();
-                //if the element does not exist in the existing schema
-                if ( existingSchema.getElementByName(qName) == null )
-                {
-                    //add it to the existing schema
-                    existingSchema.getElements().add(qName, schemaElement);
-                    existingSchema.getItems().add(schemaElement);
-                }
-            }
-            else if ( schemaObject instanceof XmlSchemaType )
-            {
-                schemaType = (XmlSchemaType)itemsIterator.next();
-                qName = schemaType.getQName();
-                //if the element does not exist in the existing schema
-                if ( existingSchema.getElementByName(qName) == null )
-                {
-                    //add it to the existing schema
-                    existingSchema.getSchemaTypes().add(qName, schemaType);
-                    existingSchema.getItems().add(schemaType);
-                    //add imports 
-                    addImports(existingSchema, qName);
-                }
-            }
-            else if ( schemaObject instanceof XmlSchemaInclude )
-            {
-                schemaInclude = (XmlSchemaInclude)itemsIterator.next();
-                if ( !existingIncludes.contains(schemaInclude.getSchemaLocation()) )
-                {
-                    existingSchema.getIncludes().add(schemaInclude);
-                    existingSchema.getItems().add(schemaInclude);
-                }
-            }
-        }
-    }
-    
-    private List getExistingIncludes(XmlSchema xmlSchema)
-    {
-        List includeSchemaLocations = new Vector();
-        Iterator iterator = xmlSchema.getIncludes().getIterator();
-        
-        while ( iterator.hasNext() )
-        {
-            includeSchemaLocations.add(((XmlSchemaInclude)iterator.next()).getSchemaLocation());
-        }
-        return includeSchemaLocations;
-    }
-    
-    private XmlSchemaForm getAttrFormDefaultSetting()
-    {
-        if ( FORM_DEFAULT_UNQUALIFIED.equals(getAttrFormDefault()) )
-        {
-            return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED);
-        }
-        else
-        {
-            return new XmlSchemaForm(XmlSchemaForm.QUALIFIED);
-        }
-    }
-    
-    private XmlSchemaForm getElementFormDefaultSetting()
-    {
-        if ( FORM_DEFAULT_UNQUALIFIED.equals(getElementFormDefault()) )
-        {
-            return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED);
-        }
-        else
-        {
-            return new XmlSchemaForm(XmlSchemaForm.QUALIFIED);
-        }
-    }
-    
-    private String getToken(String s)
-    {
-        //get the schema element name eg. <xs:schema or <xsd:schema.  We only know that 'schema' will be used
-        //but not sure what suffix is used.  Hence this method to get the actual element name used
-        int i = s.indexOf(SCHEMA_ELEMENT_NAME);
-        int j = s.substring(0, i).lastIndexOf("<");
-        return s.substring(j, i + SCHEMA_ELEMENT_NAME.length());
-    }
-
-
-    public String getAttrFormDefault() {
-        return attrFormDefault;
-    }
-
-
-    public void setAttrFormDefault(String attrFormDefault) {
-        this.attrFormDefault = attrFormDefault;
-    }
-
-
-    public String getElementFormDefault() {
-        return elementFormDefault;
-    }
-
-
-    public void setElementFormDefault(String elementFormDefault) {
-        this.elementFormDefault = elementFormDefault;
-    }
-}
+package org.apache.tuscany.tools.java2wsdl.generate;
+
+import java.io.StringReader;
+import java.lang.reflect.Constructor;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sdo.util.SDOUtil;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaAny;
+import org.apache.ws.commons.schema.XmlSchemaAnyAttribute;
+import org.apache.ws.commons.schema.XmlSchemaChoice;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+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.XmlSchemaContentProcessing;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaForm;
+import org.apache.ws.commons.schema.XmlSchemaGroupBase;
+import org.apache.ws.commons.schema.XmlSchemaImport;
+import org.apache.ws.commons.schema.XmlSchemaInclude;
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.apache.ws.commons.schema.XmlSchemaSequence;
+import org.apache.ws.commons.schema.XmlSchemaSimpleType;
+import org.apache.ws.commons.schema.XmlSchemaSimpleTypeRestriction;
+import org.apache.ws.commons.schema.XmlSchemaType;
+import org.apache.ws.java2wsdl.Java2WSDLUtils;
+import org.codehaus.jam.JClass;
+import org.codehaus.jam.JProperty;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+import commonj.sdo.helper.XSDHelper;
+
+public class SchemaBuilder implements TuscanyJava2WSDLConstants
+{
+    public static final String NAME_SPACE_PREFIX        = "stn_";
+    private static int prefixCount                      = 1;
+    
+    public static final String MIXED = "mixed";
+    public static final String GROUP = "group";
+    
+    protected String attrFormDefault = null;
+    protected String elementFormDefault = null;
+    protected XmlSchemaCollection xmlSchemaCollection = new XmlSchemaCollection();
+    private Hashtable schemaMap = new Hashtable();
+    protected Hashtable targetNamespacePrefixMap = new Hashtable();
+    protected TuscanyTypeTable typeTable = new TuscanyTypeTable();
+    protected Map schemaLocationMap = null;
+    private ClassLoader classLoader;
+    
+    protected SchemaBuilder(XmlSchemaCollection schemaCollection,
+                                                Hashtable schemaMap,
+                                                Hashtable nsPrefixMap,
+                                                TuscanyTypeTable typeTable,
+                                                String attrFormDef,
+                                                String eleFormDef,
+                                                Map schemaLocMap,
+                                                ClassLoader classLoader)
+    {
+        this.schemaMap = schemaMap;
+        this.xmlSchemaCollection = schemaCollection;
+        this.targetNamespacePrefixMap = nsPrefixMap;
+        this.typeTable = typeTable;
+        this.schemaLocationMap = schemaLocMap;
+        this.classLoader = classLoader;
+        this.attrFormDefault = attrFormDef;
+        this.elementFormDefault = eleFormDef;
+    }
+    
+    
+    private boolean isSDO(JClass javaType) throws Exception
+    {
+        Class sdoClass = Class.forName(javaType.getQualifiedName(), true, classLoader);
+        return DataObject.class.isAssignableFrom(sdoClass);
+    }
+    
+    private void buildComplexTypeContents_JavaType(JClass javaType, 
+                                                        XmlSchemaComplexType complexType,
+                                                        XmlSchema xmlSchema ) throws Exception
+    {
+       JProperty [] properties = javaType.getDeclaredProperties();
+       
+       for (int i = 0; i < properties.length; i++) 
+       {
+            JProperty property = properties[i];
+            String propertyName = property.getType().getQualifiedName();
+            boolean isArryType = property.getType().isArrayType();
+            if (isArryType) 
+            {
+                propertyName = property.getType().getArrayComponentType().getQualifiedName();
+            }
+                
+            if (typeTable.isSimpleType(propertyName)) 
+            {
+                XmlSchemaElement elt1 = new XmlSchemaElement();
+                elt1.setName(getCorrectName(property.getSimpleName()));
+                elt1.setSchemaTypeName(typeTable.getSimpleSchemaTypeName(propertyName));
+                ((XmlSchemaGroupBase)complexType.getParticle()).getItems().add(elt1);
+                if (isArryType) 
+                {
+                    elt1.setMaxOccurs(Long.MAX_VALUE);
+                    elt1.setMinOccurs(0);
+                }
+            }
+            else 
+            {
+                QName schemaTypeName = null;
+                if (isArryType) 
+                {
+                    schemaTypeName = generateSchema(property.getType().getArrayComponentType());
+                } 
+                else 
+                {
+                    schemaTypeName = generateSchema(property.getType());
+                }
+                    
+                XmlSchemaElement elt1 = new XmlSchemaElement();
+                elt1.setName(getCorrectName(property.getSimpleName()));
+                elt1.setSchemaTypeName(schemaTypeName);
+                ((XmlSchemaGroupBase)complexType.getParticle()).getItems().add(elt1);
+                
+                if (isArryType) 
+                {
+                    elt1.setMaxOccurs(Long.MAX_VALUE);
+                    elt1.setMinOccurs(0);
+                }
+                
+                addImports(xmlSchema, schemaTypeName);
+            }
+       }
+    }
+    
+    protected QName buildSchema_JavaType(JClass javaType) throws Exception
+    {
+        QName schemaTypeName = typeTable.getComplexSchemaTypeName(javaType);
+        if (  schemaTypeName == null ) 
+        {
+            String simpleName = javaType.getSimpleName();
+    
+            String packageName = javaType.getContainingPackage().getQualifiedName();
+            
+            String targetNameSpace = Java2WSDLUtils.schemaNamespaceFromPackageName(packageName).toString();
+    
+            XmlSchema xmlSchema = getXmlSchema(targetNameSpace);
+            String targetNamespacePrefix = (String) targetNamespacePrefixMap.get(targetNameSpace);
+    
+            schemaTypeName = new QName(targetNameSpace, simpleName, targetNamespacePrefix);
+            XmlSchemaComplexType complexType = new XmlSchemaComplexType(xmlSchema);
+            complexType.setName(simpleName);
+            
+            XmlSchemaSequence sequence = new XmlSchemaSequence();
+            complexType.setParticle(sequence);
+            
+            createGlobalElement(xmlSchema, complexType, schemaTypeName);
+            xmlSchema.getItems().add(complexType);
+            xmlSchema.getSchemaTypes().add(schemaTypeName, complexType);
+            
+            //adding this type to the table
+            //typeTable.addComplexScheam(name, complexType.getQName());
+            typeTable.addComplexSchemaType(targetNameSpace, simpleName, schemaTypeName);
+            buildComplexTypeContents_JavaType(javaType, complexType, xmlSchema);
+        }
+        return schemaTypeName;
+    }
+    
+    
+    protected QName buildSchema_SDO(Type dataType) //throws Exception
+    {
+        QName schemaTypeName = typeTable.getComplexSchemaTypeName(dataType.getURI(), dataType.getName());
+        
+        if ( schemaTypeName == null )
+        {
+            //invoke XSDHelper to generate schema for this sdo type
+            XSDHelper xsdHelper = SDOUtil.createXSDHelper(SDOUtil.createTypeHelper());
+            //it is better to check if XSDHelper can generate the schema
+            if ( xsdHelper.isXSD(dataType) )
+            {
+                //if schemalocations for xsd has been specified, include them
+                includeExtXSD(dataType);
+            }
+            else
+            {
+                List typeList = new Vector();
+                typeList.add(dataType);
+                
+                //the xsdhelper returns a string that contains the schemas for this type
+                String schemaDefns = xsdHelper.generate(typeList, schemaLocationMap);
+                    
+                //extract the schema elements and store them in the schema map
+                extractSchemas(schemaDefns);
+            }
+            //since the XSDHelper will not return the type name, create it and store it in typetable
+            schemaTypeName = new QName(dataType.getURI(), 
+                                        dataType.getName(),
+                                        generatePrefix());
+            typeTable.addComplexSchemaType(dataType.getURI(),
+                                                dataType.getName(),
+                                                schemaTypeName);
+
+        }
+        return schemaTypeName;
+    }
+    
+    
+    public QName generateSchema(JClass javaType) throws Exception
+    {
+        if ( isSDO(javaType) )
+        {
+            Type dataType = createDataObject(javaType).getType();
+            return buildSchema_SDO(dataType);
+        }
+        else
+        {
+            return buildSchema_JavaType(javaType);
+        }
+    }
+    
+    private XmlSchema getXmlSchema(String targetNamespace)  
+    {
+        XmlSchema xmlSchema; 
+        
+        if ((xmlSchema = (XmlSchema) schemaMap.get(targetNamespace)) == null) 
+        {
+            String targetNamespacePrefix = generatePrefix();
+            
+            xmlSchema = new XmlSchema(targetNamespace, xmlSchemaCollection);
+            xmlSchema.setAttributeFormDefault(getAttrFormDefaultSetting());
+            xmlSchema.setElementFormDefault(getElementFormDefaultSetting());
+            
+            targetNamespacePrefixMap.put(targetNamespace, targetNamespacePrefix);
+            schemaMap.put(targetNamespace, xmlSchema);
+            
+            Hashtable prefixmap = new Hashtable();
+            prefixmap.put(TuscanyTypeTable.XS_URI_PREFIX, TuscanyTypeTable.XML_SCHEMA_URI);
+            prefixmap.put(targetNamespacePrefix, targetNamespace);
+            xmlSchema.setPrefixToNamespaceMap(prefixmap);
+        }
+        return xmlSchema;
+    }
+    
+    
+    /**
+     * JAM convert first name of an attribute into UpperCase as an example if
+     * there is a instance variable called foo in a bean , then Jam give that as
+     * Foo so this method is to correct that error
+     *
+     * @param wrongName
+     * @return the right name, using english as the locale for case conversion
+     */
+    public static String getCorrectName(String wrongName) 
+    {
+        if (wrongName.length() > 1) {
+            return wrongName.substring(0, 1).toLowerCase(Locale.ENGLISH)
+                    + wrongName.substring(1, wrongName.length());
+        } else {
+            return wrongName.substring(0, 1).toLowerCase(Locale.ENGLISH);
+        }
+    }
+    
+    private String addImports(XmlSchema xmlSchema, QName schemaTypeName)
+    {
+        String prefix = null;
+        Enumeration enumeration = xmlSchema.getPrefixToNamespaceMap().keys();
+        while ( enumeration.hasMoreElements() )
+        {
+            prefix = (String)enumeration.nextElement();
+            if ( schemaTypeName.getNamespaceURI().equals(
+                    xmlSchema.getPrefixToNamespaceMap().get(prefix)) )
+            {
+                return prefix;
+            }
+        }
+        
+        //the following lines are executed only if a prefix was not found which implies that the 
+        //schemaTypeName was not imported earlier and also it does not belong to the targetnamespace
+        String schemaLocation = null;
+        XmlSchemaImport importElement = new XmlSchemaImport();
+        importElement.setNamespace(schemaTypeName.getNamespaceURI());
+        xmlSchema.getItems().add(importElement);
+        prefix = generatePrefix();
+        xmlSchema.getPrefixToNamespaceMap().put(prefix, schemaTypeName.getNamespaceURI());
+
+        return prefix;
+    }
+    
+    
+    
+    private String formGlobalElementName(String typeName)
+    {
+        String firstChar = typeName.substring(0,1);
+        return typeName.replaceFirst(firstChar, firstChar.toLowerCase());
+    }
+    
+    private void createGlobalElement(XmlSchema xmlSchema, XmlSchemaComplexType complexType, QName elementName )
+    {
+        XmlSchemaElement globalElement = new XmlSchemaElement();
+        globalElement.setSchemaTypeName(complexType.getQName());
+        globalElement.setName(formGlobalElementName(complexType.getName()));
+        globalElement.setQName(elementName);
+        
+        xmlSchema.getItems().add(globalElement);
+        xmlSchema.getElements().add(elementName, globalElement);
+    }
+    
+    private DataObject createDataObject(JClass sdoClass) throws Exception
+    {
+        Class sdoType = Class.forName(sdoClass.getQualifiedName(), true, classLoader);
+        
+        Constructor constructor = sdoType.getDeclaredConstructor(new Class[0]);
+        constructor.setAccessible(true);
+        Object instance = constructor.newInstance(new Object[0]);
+        return (DataObject)instance;
+    }
+    
+    
+    private String generatePrefix() 
+    {
+        return NAME_SPACE_PREFIX + prefixCount++;
+    }
+    
+    private void includeExtXSD(Type dataType)
+    {
+        //now we know there is a type for which the xsd must come from outside
+        //create a schema for the namespace of this type and add an include in it for 
+        //the xsd that is defined externally
+        XmlSchema xmlSchema = getXmlSchema(dataType.getURI());
+        
+        //ideally there could  be more than one external schema defintions for a namespace
+        //and hence schemalocations will be a list of locations
+        //List schemaLocations = (List)schemaLocationMap.get(dataType.getURI());
+        
+        //since as per the specs the input to XSDHelper is a map of <String, String> allowing
+        //only one schemalocation for a namespace.  So for now this single location will be
+        //picked up and put into a list
+        List schemaLocations = new Vector();
+        
+        if ( schemaLocationMap.get(dataType.getURI()) != null )
+        {
+            schemaLocations.add(schemaLocationMap.get(dataType.getURI()));
+        }
+        
+        if ( schemaLocations.size() <= 0 )
+        {
+            schemaLocations.add(DEFAULT_SCHEMA_LOCATION);
+        }
+        
+        Iterator includesIterator = xmlSchema.getIncludes().getIterator();
+        Iterator schemaLocIterator = schemaLocations.iterator();
+        String aSchemaLocation = null;
+        boolean includeExists = false;
+        //include all external schema locations
+        while ( schemaLocIterator.hasNext() )
+        {
+            aSchemaLocation = (String)schemaLocIterator.next();
+            while ( includesIterator.hasNext() )
+            {
+                if ( !includeExists && aSchemaLocation.equals(
+                        ((XmlSchemaInclude)includesIterator.next()).getSchemaLocation() 
+                                           ))
+                {
+                    includeExists = true;
+                }
+            }
+            
+            if ( !includeExists )
+            {
+                XmlSchemaInclude includeElement = new XmlSchemaInclude();
+                includeElement.setSchemaLocation(aSchemaLocation);
+                xmlSchema.getIncludes().add(includeElement);
+                xmlSchema.getItems().add(includeElement);
+            }
+        }
+
+    }
+    
+    private void extractSchemas(String schemaDefns)
+    {
+        //load each schema element and add it to the schema map
+
+        String token = getToken(schemaDefns);
+        int curIndex = schemaDefns.indexOf(token);
+        int nextIndex = schemaDefns.indexOf(token, curIndex + token.length());
+        
+        while ( curIndex != -1 )
+        {
+            StringReader sr =  null;
+            if ( nextIndex != -1 )
+                sr = new StringReader(schemaDefns.substring(curIndex, nextIndex));
+            else
+                sr = new StringReader(schemaDefns.substring(curIndex));
+            
+            XmlSchemaCollection collection = new XmlSchemaCollection();
+            XmlSchema aSchema = collection.read(sr, null);
+            addSchemaToMap(aSchema);
+  
+            curIndex = nextIndex;
+            nextIndex = schemaDefns.indexOf(token, curIndex + token.length());
+        }
+    }
+    
+    private void addSchemaToMap(XmlSchema extractedSchema)
+    {
+        //check if a Schema object already exists in schema map for targetNamespace of this schema element
+        //if it does then copy the contents of this schema element to the existing one, ensuring that 
+        //duplicate elements are not created. i.e. before adding some child element like 'include' or 'import' 
+        //check if it already exists, if it does don't add this
+        XmlSchema existingSchema = (XmlSchema)schemaMap.get(extractedSchema.getTargetNamespace());
+        
+        if ( existingSchema == null )
+        {
+            extractedSchema.setAttributeFormDefault(getAttrFormDefaultSetting());
+            extractedSchema.setElementFormDefault(getElementFormDefaultSetting());
+            schemaMap.put(extractedSchema.getTargetNamespace(), extractedSchema);
+            
+        }
+        else
+        {
+            copySchemaItems(existingSchema, extractedSchema);
+        }
+    }
+    
+    private void copySchemaItems(XmlSchema existingSchema, XmlSchema aSchema)
+    {
+        //items to copy are imports, includes, elements, types ...
+        //each item is checked if it is a duplicate entry and  copied only if it isn't
+        Iterator itemsIterator = aSchema.getItems().getIterator();
+        Object schemaObject = null;
+        XmlSchemaElement schemaElement = null;
+        XmlSchemaType schemaType = null;
+        XmlSchemaInclude schemaInclude = null;
+        QName qName = null;
+        List existingIncludes = getExistingIncludes(existingSchema);
+        
+        while ( itemsIterator.hasNext() )
+        {
+            schemaObject = itemsIterator.next();
+            if ( schemaObject instanceof XmlSchemaElement )
+            {
+                schemaElement = (XmlSchemaElement)schemaObject;
+                qName = schemaElement.getQName();
+                //if the element does not exist in the existing schema
+                if ( existingSchema.getElementByName(qName) == null )
+                {
+                    //add it to the existing schema
+                    existingSchema.getElements().add(qName, schemaElement);
+                    existingSchema.getItems().add(schemaElement);
+                }
+            }
+            else if ( schemaObject instanceof XmlSchemaType )
+            {
+                schemaType = (XmlSchemaType)itemsIterator.next();
+                qName = schemaType.getQName();
+                //if the element does not exist in the existing schema
+                if ( existingSchema.getElementByName(qName) == null )
+                {
+                    //add it to the existing schema
+                    existingSchema.getSchemaTypes().add(qName, schemaType);
+                    existingSchema.getItems().add(schemaType);
+                    //add imports 
+                    addImports(existingSchema, qName);
+                }
+            }
+            else if ( schemaObject instanceof XmlSchemaInclude )
+            {
+                schemaInclude = (XmlSchemaInclude)itemsIterator.next();
+                if ( !existingIncludes.contains(schemaInclude.getSchemaLocation()) )
+                {
+                    existingSchema.getIncludes().add(schemaInclude);
+                    existingSchema.getItems().add(schemaInclude);
+                }
+            }
+        }
+    }
+    
+    private List getExistingIncludes(XmlSchema xmlSchema)
+    {
+        List includeSchemaLocations = new Vector();
+        Iterator iterator = xmlSchema.getIncludes().getIterator();
+        
+        while ( iterator.hasNext() )
+        {
+            includeSchemaLocations.add(((XmlSchemaInclude)iterator.next()).getSchemaLocation());
+        }
+        return includeSchemaLocations;
+    }
+    
+    private XmlSchemaForm getAttrFormDefaultSetting()
+    {
+        if ( FORM_DEFAULT_UNQUALIFIED.equals(getAttrFormDefault()) )
+        {
+            return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED);
+        }
+        else
+        {
+            return new XmlSchemaForm(XmlSchemaForm.QUALIFIED);
+        }
+    }
+    
+    private XmlSchemaForm getElementFormDefaultSetting()
+    {
+        if ( FORM_DEFAULT_UNQUALIFIED.equals(getElementFormDefault()) )
+        {
+            return new XmlSchemaForm(XmlSchemaForm.UNQUALIFIED);
+        }
+        else
+        {
+            return new XmlSchemaForm(XmlSchemaForm.QUALIFIED);
+        }
+    }
+    
+    private String getToken(String s)
+    {
+        //get the schema element name eg. <xs:schema or <xsd:schema.  We only know that 'schema' will be used
+        //but not sure what suffix is used.  Hence this method to get the actual element name used
+        int i = s.indexOf(SCHEMA_ELEMENT_NAME);
+        int j = s.substring(0, i).lastIndexOf("<");
+        return s.substring(j, i + SCHEMA_ELEMENT_NAME.length());
+    }
+
+
+    public String getAttrFormDefault() {
+        return attrFormDefault;
+    }
+
+
+    public void setAttrFormDefault(String attrFormDefault) {
+        this.attrFormDefault = attrFormDefault;
+    }
+
+
+    public String getElementFormDefault() {
+        return elementFormDefault;
+    }
+
+
+    public void setElementFormDefault(String elementFormDefault) {
+        this.elementFormDefault = elementFormDefault;
+    }
+}

Propchange: incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/SchemaBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java?rev=437778&r1=437777&r2=437778&view=diff
==============================================================================
--- incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java (original)
+++ incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java Mon Aug 28 11:53:49 2006
@@ -1,448 +1,448 @@
-/**
- *
- *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-package org.apache.tuscany.tools.java2wsdl.generate;
-
-import java.io.ByteArrayInputStream;
-import java.io.StringWriter;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.Hashtable;
-import java.util.Iterator;
-import java.util.Map;
-
-import javax.xml.namespace.QName;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamReader;
-
-import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.OMFactory;
-import org.apache.axiom.om.OMNamespace;
-import org.apache.axiom.om.OMNode;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.ws.commons.schema.XmlSchema;
-import org.apache.ws.java2wsdl.Java2WSDLConstants;
-import org.codehaus.jam.JMethod;
-
-public class TuscanyJava2OMBuilder implements Java2WSDLConstants {
-
-    private TuscanyTypeTable typeTable = null;
-    
-    private Map sdoAnnotationMap = null;
-
-    private static int prefixCount = 1;
-
-    private static final String NAMESPACE_PREFIX = "ns";
-
-    private JMethod method [];
-
-    private Collection schemaCollection;
-
-    private String serviceName;
-
-    private String targetNamespace;
-
-    private String targetNamespacePrefix;
-    
-    private String schemaTargetNamespace;
-
-    private String schemaTargetNamespacePrefix;
-
-    private OMNamespace ns1;
-
-    private OMNamespace soap;
-
-    private OMNamespace soap12;
-
-    private OMNamespace tns;
-
-    private OMNamespace wsdl;
-
-    private OMNamespace mime;
-
-    private OMNamespace http;
-
-    private String style;
-
-    private String use;
-
-    private String locationURL;
-
-    public TuscanyJava2OMBuilder(JMethod[] method, Collection schemaCollection,
-                          String schemaTargNs, String schemaTargNsPfx,
-                          TuscanyTypeTable typeTab, Map sdoAnnoMap,
-                          String serviceName, String targetNamespace,
-                          String targetNamespacePrefix, String style, String use,
-                          String locationURL) {
-        this.method = method;
-        this.schemaCollection = schemaCollection;
-        this.typeTable = typeTab;
-        sdoAnnotationMap = sdoAnnoMap;
-        schemaTargetNamespace = schemaTargNs;
-        schemaTargetNamespacePrefix = schemaTargNsPfx;
-        
-        
-        if (style == null) {
-            this.style = DOCUMENT;
-        } else {
-            this.style = style;
-        }
-        if (use == null) {
-            this.use = LITERAL;
-        } else {
-            this.use = use;
-        }
-
-        if (locationURL == null) {
-            this.locationURL = DEFAULT_LOCATION_URL;
-        } else {
-            this.locationURL = locationURL;
-        }
-        this.serviceName = serviceName;
-
-        if (targetNamespace != null && !targetNamespace.trim().equals("")) {
-            this.targetNamespace = targetNamespace;
-        } else {
-            this.targetNamespace = DEFAULT_TARGET_NAMESPACE;
-        }
-
-        if (targetNamespacePrefix != null
-                && !targetNamespacePrefix.trim().equals("")) {
-            this.targetNamespacePrefix = targetNamespacePrefix;
-        } else {
-            this.targetNamespacePrefix = DEFAULT_TARGET_NAMESPACE_PREFIX;
-        }
-    }
-
-    public OMElement generateOM() throws Exception {
-        OMFactory fac = OMAbstractFactory.getOMFactory();
-        wsdl = fac.createOMNamespace(WSDL_NAMESPACE,
-                DEFAULT_WSDL_NAMESPACE_PREFIX);
-        OMElement ele = fac.createOMElement("definitions", wsdl);
-
-        ele.addAttribute("targetNamespace", targetNamespace, null);
-        generateNamespaces(fac, ele);
-        generateTypes(fac, ele);
-        generateMessages(fac, ele);
-        generatePortType(fac, ele);
-        generateBinding(fac, ele);
-        generateService(fac, ele);
-        return ele;
-    }
-
-    private void generateNamespaces(OMFactory fac, OMElement defintions) {
-        soap = defintions.declareNamespace(URI_WSDL11_SOAP, SOAP11_PREFIX);
-        tns = defintions.declareNamespace(targetNamespace,
-                targetNamespacePrefix);
-        soap12 = defintions.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX);
-        http = defintions.declareNamespace(HTTP_NAMESPACE, HTTP_PREFIX);
-        mime = defintions.declareNamespace(MIME_NAMESPACE, MIME_PREFIX);
-    }
-
-    private void generateTypes(OMFactory fac, OMElement defintions)
-            throws Exception {
-        OMElement wsdlTypes = fac.createOMElement("types", wsdl);
-        StringWriter writer = new StringWriter();
-
-        // wrap the Schema elements with this start and end tags to create a
-        // document root
-        // under which the schemas can fall into
-        writer.write("<xmlSchemas>");
-        writeSchemas(writer);
-        writer.write("</xmlSchemas>");
-        
-        XMLStreamReader xmlReader = XMLInputFactory.newInstance()
-                .createXMLStreamReader(
-                        new ByteArrayInputStream(writer.toString().getBytes()));
-
-        StAXOMBuilder staxOMBuilders = new StAXOMBuilder(fac, xmlReader);
-        OMElement documentElement = staxOMBuilders.getDocumentElement();
-
-        SDOAnnotationsDecorator decorator = new SDOAnnotationsDecorator();
-        decorator.decorateWithAnnotations(sdoAnnotationMap, documentElement);
-        
-        Iterator iterator = documentElement.getChildElements();
-        while (iterator.hasNext()) 
-        {
-            wsdlTypes.addChild((OMNode) iterator.next());
-        }
-        defintions.addChild(wsdlTypes);
-    }
-
-    private void writeSchemas(StringWriter writer) {
-        Iterator iterator = schemaCollection.iterator();
-        XmlSchema xmlSchema = null;
-        //Iterator typeIterator = null;
-        while (iterator.hasNext()) {
-            xmlSchema = (XmlSchema) iterator.next();
-            //typeIterator = xmlSchema.getSchemaTypes().getValues();
-            /*while (typeIterator.hasNext()) {
-                xmlSchema.getItems().add((XmlSchemaObject) typeIterator.next());
-                
-            }*/
-            xmlSchema.write(writer);
-        }
-    }
-
-    private void generateMessages(OMFactory fac, OMElement definitions) {
-        Hashtable namespaceMap = new Hashtable();
-        String namespacePrefix = null;
-        String namespaceURI = null;
-        QName messagePartType = null;
-        for (int i = 0; i < method.length; i++) {
-            JMethod jmethod = method[i];
-            //Request Message
-            OMElement requestMessge = fac.createOMElement(
-                    MESSAGE_LOCAL_NAME, wsdl);
-            requestMessge.addAttribute(ATTRIBUTE_NAME, jmethod
-                    .getSimpleName()
-                    + MESSAGE_SUFFIX, null);
-            definitions.addChild(requestMessge);
-            
-            // only if a type for the message part has already been defined
-            if ((messagePartType = 
-                    typeTable.getComplexSchemaTypeName(schemaTargetNamespace, jmethod.getSimpleName())) != null) 
-            {
-                namespaceURI = messagePartType.getNamespaceURI();
-                // avoid duplicate namespaces
-                if ((namespacePrefix = (String) namespaceMap.get(namespaceURI)) == null) {
-                    namespacePrefix = generatePrefix();
-                    namespaceMap.put(namespaceURI, namespacePrefix);
-                }
-
-                
-                OMElement requestPart = fac.createOMElement(PART_ATTRIBUTE_NAME, wsdl);
-                requestMessge.addChild(requestPart);
-                requestPart.addAttribute(ATTRIBUTE_NAME, "part1", null);
-
-                requestPart.addAttribute(ELEMENT_ATTRIBUTE_NAME,
-                                            namespacePrefix + COLON_SEPARATOR
-                                            + jmethod.getSimpleName(), null);
-            }
-
-            // only if a type for the message part has already been defined
-            if ((messagePartType = 
-                    typeTable.getComplexSchemaTypeName(schemaTargetNamespace,jmethod.getSimpleName()+ RESPONSE)) != null) 
-            {
-                namespaceURI = messagePartType.getNamespaceURI();
-                if ((namespacePrefix = (String) namespaceMap.get(namespaceURI)) == null) {
-                    namespacePrefix = generatePrefix();
-                    namespaceMap.put(namespaceURI, namespacePrefix);
-                }
-            //Response Message
-                OMElement responseMessge = fac.createOMElement(
-                        MESSAGE_LOCAL_NAME, wsdl);
-                responseMessge.addAttribute(ATTRIBUTE_NAME, jmethod
-                        .getSimpleName()
-                        + RESPONSE_MESSAGE, null);
-                definitions.addChild(responseMessge);
-                OMElement responsePart = fac.createOMElement(
-                        PART_ATTRIBUTE_NAME, wsdl);
-            responseMessge.addChild(responsePart);
-            responsePart.addAttribute(ATTRIBUTE_NAME, "part1", null);
-
-            responsePart.addAttribute(ELEMENT_ATTRIBUTE_NAME,
-                        namespacePrefix + COLON_SEPARATOR
-                                + jmethod.getSimpleName() + RESPONSE, null);
-            }
-        }
-
-        // now add these unique namespaces to the the definitions element
-        Enumeration enumeration = namespaceMap.keys();
-        while (enumeration.hasMoreElements()) {
-            namespaceURI = (String) enumeration.nextElement();
-            definitions.declareNamespace(namespaceURI, (String) namespaceMap
-                    .get(namespaceURI));
-        }
-    }
-
-    /**
-     * Generate the porttypes
-     */
-    private void generatePortType(OMFactory fac, OMElement defintions) {
-        JMethod jmethod = null;
-        OMElement operation = null;
-        OMElement message = null;
-        OMElement portType = fac.createOMElement(PORT_TYPE_LOCAL_NAME, wsdl);
-        defintions.addChild(portType);
-        portType.addAttribute(ATTRIBUTE_NAME, serviceName + PORT_TYPE_SUFFIX,
-                null);
-        //adding message refs
-        for (int i = 0; i < method.length; i++) {
-            jmethod = method[i];
-            operation = fac.createOMElement(OPERATION_LOCAL_NAME, wsdl);
-            portType.addChild(operation);
-            operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(),
-                    null);
-
-            message = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl);
-            message.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
-                    + COLON_SEPARATOR + jmethod.getSimpleName()
-                    + MESSAGE_SUFFIX, null);
-            operation.addChild(message);
-
-            if (!jmethod.getReturnType().isVoidType()) {
-                message = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl);
-                message.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
-                        + COLON_SEPARATOR + jmethod.getSimpleName()
-                        + RESPONSE_MESSAGE, null);
-                operation.addChild(message);
-            }
-        }
-
-    }
-
-    /**
-     * Generate the service
-     */
-    public void generateService(OMFactory fac, OMElement defintions) {
-        OMElement service = fac.createOMElement(SERVICE_LOCAL_NAME, wsdl);
-        defintions.addChild(service);
-        service.addAttribute(ATTRIBUTE_NAME, serviceName, null);
-        OMElement port = fac.createOMElement(PORT, wsdl);
-        service.addChild(port);
-        port.addAttribute(ATTRIBUTE_NAME, serviceName + SOAP11PORT, null);
-        port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + COLON_SEPARATOR
-                + serviceName + BINDING_NAME_SUFFIX, null);
-        addExtensionElement(fac, port, soap, SOAP_ADDRESS, LOCATION, locationURL
-                + serviceName);
-
-        port = fac.createOMElement(PORT, wsdl);
-        service.addChild(port);
-        port.addAttribute(ATTRIBUTE_NAME, serviceName + SOAP12PORT, null);
-        port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + COLON_SEPARATOR
-                + serviceName + SOAP12BINDING_NAME_SUFFIX, null);
-        addExtensionElement(fac, port, soap12, SOAP_ADDRESS, LOCATION, locationURL
-                + serviceName);
-    }
-
-    /**
-     * Generate the bindings
-     */
-    private void generateBinding(OMFactory fac, OMElement defintions) {
-        generateSoap11Binding(fac, defintions);
-        generateSoap12Binding(fac, defintions);
-    }
-
-    private void generateSoap11Binding(OMFactory fac, OMElement defintions) {
-        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
-        defintions.addChild(binding);
-        binding.addAttribute(ATTRIBUTE_NAME, serviceName + BINDING_NAME_SUFFIX,
-                null);
-        binding.addAttribute("type", tns.getPrefix() + COLON_SEPARATOR
-                + serviceName + PORT_TYPE_SUFFIX, null);
-
-        addExtensionElement(fac, binding, soap, BINDING_LOCAL_NAME, TRANSPORT,
-                TRANSPORT_URI, STYLE, style);
-
-        for (int i = 0; i < method.length; i++) {
-            JMethod jmethod = method[i];
-            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
-                    wsdl);
-            binding.addChild(operation);
-
-            addExtensionElement(fac, operation, soap, OPERATION_LOCAL_NAME,
-                    SOAP_ACTION, URN_PREFIX + COLON_SEPARATOR
-                    + jmethod.getSimpleName(), STYLE, style);
-            operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(),
-                    null);
-
-            OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl);
-            addExtensionElement(fac, input, soap, SOAP_BODY, SOAP_USE, use,
-                    "namespace", targetNamespace);
-            operation.addChild(input);
-
-            if (!jmethod.getReturnType().isVoidType()) {
-                OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl);
-                addExtensionElement(fac, output, soap, SOAP_BODY, SOAP_USE, use,
-                        "namespace", targetNamespace);
-                operation.addChild(output);
-            }
-        }
-    }
-
-    private void generateSoap12Binding(OMFactory fac, OMElement defintions) {
-        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
-        defintions.addChild(binding);
-        binding.addAttribute(ATTRIBUTE_NAME, serviceName + SOAP12BINDING_NAME_SUFFIX,
-                null);
-        binding.addAttribute("type", tns.getPrefix() + COLON_SEPARATOR
-                + serviceName + PORT_TYPE_SUFFIX, null);
-
-        addExtensionElement(fac, binding, soap12, BINDING_LOCAL_NAME, TRANSPORT,
-                TRANSPORT_URI, STYLE, style);
-
-        for (int i = 0; i < method.length; i++) {
-            JMethod jmethod = method[i];
-            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
-                    wsdl);
-            binding.addChild(operation);
-            operation.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX);
-
-            addExtensionElement(fac, operation, soap12, OPERATION_LOCAL_NAME,
-                    SOAP_ACTION, URN_PREFIX + COLON_SEPARATOR
-                    + jmethod.getSimpleName(), STYLE, style);
-            operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(),
-                    null);
-
-            OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl);
-            addExtensionElement(fac, input, soap12, SOAP_BODY, SOAP_USE, use,
-                    "namespace", targetNamespace);
-            operation.addChild(input);
-
-            if (!jmethod.getReturnType().isVoidType()) {
-            OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl);
-                addExtensionElement(fac, output, soap12, SOAP_BODY, SOAP_USE, use,
-                        "namespace", targetNamespace);
-            operation.addChild(output);
-        }
-    }
-    }
-
-//    private void addExtensionElement(OMFactory fac, OMElement element, String name, OMNamespace namespace,
-//                                     Hashtable attrs) {
-//        OMElement soapbinding = fac.createOMElement(name, namespace);
-//        element.addChild(soapbinding);
-//        Enumeration enumeration = attrs.keys();
-//        String attrName = null;
-//        while (enumeration.hasMoreElements()) {
-//            attrName = (String) enumeration.nextElement();
-//            soapbinding.addAttribute(attrName, (String) attrs.get(attrName), null);
-//        }
-//    }
-
-    private void addExtensionElement(OMFactory fac, OMElement element, OMNamespace namespace,
-                                     String name, String att1Name, String att1Value, String att2Name,
-                                     String att2Value) {
-        OMElement soapbinding = fac.createOMElement(name, namespace);
-        element.addChild(soapbinding);
-        soapbinding.addAttribute(att1Name, att1Value, null);
-        soapbinding.addAttribute(att2Name, att2Value, null);
-    }
-
-    private void addExtensionElement(OMFactory fac, OMElement element, OMNamespace namespace,
-                                     String name, String att1Name, String att1Value) {
-        OMElement soapbinding = fac.createOMElement(name, namespace);
-        element.addChild(soapbinding);
-        soapbinding.addAttribute(att1Name, att1Value, null);
-    }
-
-    private String generatePrefix() {
-        return NAMESPACE_PREFIX + prefixCount++;
-    }
-
-}
+/**
+ *
+ *  Copyright 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.tuscany.tools.java2wsdl.generate;
+
+import java.io.ByteArrayInputStream;
+import java.io.StringWriter;
+import java.util.Collection;
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.java2wsdl.Java2WSDLConstants;
+import org.codehaus.jam.JMethod;
+
+public class TuscanyJava2OMBuilder implements Java2WSDLConstants {
+
+    private TuscanyTypeTable typeTable = null;
+    
+    private Map sdoAnnotationMap = null;
+
+    private static int prefixCount = 1;
+
+    private static final String NAMESPACE_PREFIX = "ns";
+
+    private JMethod method [];
+
+    private Collection schemaCollection;
+
+    private String serviceName;
+
+    private String targetNamespace;
+
+    private String targetNamespacePrefix;
+    
+    private String schemaTargetNamespace;
+
+    private String schemaTargetNamespacePrefix;
+
+    private OMNamespace ns1;
+
+    private OMNamespace soap;
+
+    private OMNamespace soap12;
+
+    private OMNamespace tns;
+
+    private OMNamespace wsdl;
+
+    private OMNamespace mime;
+
+    private OMNamespace http;
+
+    private String style;
+
+    private String use;
+
+    private String locationURL;
+
+    public TuscanyJava2OMBuilder(JMethod[] method, Collection schemaCollection,
+                          String schemaTargNs, String schemaTargNsPfx,
+                          TuscanyTypeTable typeTab, Map sdoAnnoMap,
+                          String serviceName, String targetNamespace,
+                          String targetNamespacePrefix, String style, String use,
+                          String locationURL) {
+        this.method = method;
+        this.schemaCollection = schemaCollection;
+        this.typeTable = typeTab;
+        sdoAnnotationMap = sdoAnnoMap;
+        schemaTargetNamespace = schemaTargNs;
+        schemaTargetNamespacePrefix = schemaTargNsPfx;
+        
+        
+        if (style == null) {
+            this.style = DOCUMENT;
+        } else {
+            this.style = style;
+        }
+        if (use == null) {
+            this.use = LITERAL;
+        } else {
+            this.use = use;
+        }
+
+        if (locationURL == null) {
+            this.locationURL = DEFAULT_LOCATION_URL;
+        } else {
+            this.locationURL = locationURL;
+        }
+        this.serviceName = serviceName;
+
+        if (targetNamespace != null && !targetNamespace.trim().equals("")) {
+            this.targetNamespace = targetNamespace;
+        } else {
+            this.targetNamespace = DEFAULT_TARGET_NAMESPACE;
+        }
+
+        if (targetNamespacePrefix != null
+                && !targetNamespacePrefix.trim().equals("")) {
+            this.targetNamespacePrefix = targetNamespacePrefix;
+        } else {
+            this.targetNamespacePrefix = DEFAULT_TARGET_NAMESPACE_PREFIX;
+        }
+    }
+
+    public OMElement generateOM() throws Exception {
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        wsdl = fac.createOMNamespace(WSDL_NAMESPACE,
+                DEFAULT_WSDL_NAMESPACE_PREFIX);
+        OMElement ele = fac.createOMElement("definitions", wsdl);
+
+        ele.addAttribute("targetNamespace", targetNamespace, null);
+        generateNamespaces(fac, ele);
+        generateTypes(fac, ele);
+        generateMessages(fac, ele);
+        generatePortType(fac, ele);
+        generateBinding(fac, ele);
+        generateService(fac, ele);
+        return ele;
+    }
+
+    private void generateNamespaces(OMFactory fac, OMElement defintions) {
+        soap = defintions.declareNamespace(URI_WSDL11_SOAP, SOAP11_PREFIX);
+        tns = defintions.declareNamespace(targetNamespace,
+                targetNamespacePrefix);
+        soap12 = defintions.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX);
+        http = defintions.declareNamespace(HTTP_NAMESPACE, HTTP_PREFIX);
+        mime = defintions.declareNamespace(MIME_NAMESPACE, MIME_PREFIX);
+    }
+
+    private void generateTypes(OMFactory fac, OMElement defintions)
+            throws Exception {
+        OMElement wsdlTypes = fac.createOMElement("types", wsdl);
+        StringWriter writer = new StringWriter();
+
+        // wrap the Schema elements with this start and end tags to create a
+        // document root
+        // under which the schemas can fall into
+        writer.write("<xmlSchemas>");
+        writeSchemas(writer);
+        writer.write("</xmlSchemas>");
+        
+        XMLStreamReader xmlReader = XMLInputFactory.newInstance()
+                .createXMLStreamReader(
+                        new ByteArrayInputStream(writer.toString().getBytes()));
+
+        StAXOMBuilder staxOMBuilders = new StAXOMBuilder(fac, xmlReader);
+        OMElement documentElement = staxOMBuilders.getDocumentElement();
+
+        SDOAnnotationsDecorator decorator = new SDOAnnotationsDecorator();
+        decorator.decorateWithAnnotations(sdoAnnotationMap, documentElement);
+        
+        Iterator iterator = documentElement.getChildElements();
+        while (iterator.hasNext()) 
+        {
+            wsdlTypes.addChild((OMNode) iterator.next());
+        }
+        defintions.addChild(wsdlTypes);
+    }
+
+    private void writeSchemas(StringWriter writer) {
+        Iterator iterator = schemaCollection.iterator();
+        XmlSchema xmlSchema = null;
+        //Iterator typeIterator = null;
+        while (iterator.hasNext()) {
+            xmlSchema = (XmlSchema) iterator.next();
+            //typeIterator = xmlSchema.getSchemaTypes().getValues();
+            /*while (typeIterator.hasNext()) {
+                xmlSchema.getItems().add((XmlSchemaObject) typeIterator.next());
+                
+            }*/
+            xmlSchema.write(writer);
+        }
+    }
+
+    private void generateMessages(OMFactory fac, OMElement definitions) {
+        Hashtable namespaceMap = new Hashtable();
+        String namespacePrefix = null;
+        String namespaceURI = null;
+        QName messagePartType = null;
+        for (int i = 0; i < method.length; i++) {
+            JMethod jmethod = method[i];
+            //Request Message
+            OMElement requestMessge = fac.createOMElement(
+                    MESSAGE_LOCAL_NAME, wsdl);
+            requestMessge.addAttribute(ATTRIBUTE_NAME, jmethod
+                    .getSimpleName()
+                    + MESSAGE_SUFFIX, null);
+            definitions.addChild(requestMessge);
+            
+            // only if a type for the message part has already been defined
+            if ((messagePartType = 
+                    typeTable.getComplexSchemaTypeName(schemaTargetNamespace, jmethod.getSimpleName())) != null) 
+            {
+                namespaceURI = messagePartType.getNamespaceURI();
+                // avoid duplicate namespaces
+                if ((namespacePrefix = (String) namespaceMap.get(namespaceURI)) == null) {
+                    namespacePrefix = generatePrefix();
+                    namespaceMap.put(namespaceURI, namespacePrefix);
+                }
+
+                
+                OMElement requestPart = fac.createOMElement(PART_ATTRIBUTE_NAME, wsdl);
+                requestMessge.addChild(requestPart);
+                requestPart.addAttribute(ATTRIBUTE_NAME, "part1", null);
+
+                requestPart.addAttribute(ELEMENT_ATTRIBUTE_NAME,
+                                            namespacePrefix + COLON_SEPARATOR
+                                            + jmethod.getSimpleName(), null);
+            }
+
+            // only if a type for the message part has already been defined
+            if ((messagePartType = 
+                    typeTable.getComplexSchemaTypeName(schemaTargetNamespace,jmethod.getSimpleName()+ RESPONSE)) != null) 
+            {
+                namespaceURI = messagePartType.getNamespaceURI();
+                if ((namespacePrefix = (String) namespaceMap.get(namespaceURI)) == null) {
+                    namespacePrefix = generatePrefix();
+                    namespaceMap.put(namespaceURI, namespacePrefix);
+                }
+            //Response Message
+                OMElement responseMessge = fac.createOMElement(
+                        MESSAGE_LOCAL_NAME, wsdl);
+                responseMessge.addAttribute(ATTRIBUTE_NAME, jmethod
+                        .getSimpleName()
+                        + RESPONSE_MESSAGE, null);
+                definitions.addChild(responseMessge);
+                OMElement responsePart = fac.createOMElement(
+                        PART_ATTRIBUTE_NAME, wsdl);
+            responseMessge.addChild(responsePart);
+            responsePart.addAttribute(ATTRIBUTE_NAME, "part1", null);
+
+            responsePart.addAttribute(ELEMENT_ATTRIBUTE_NAME,
+                        namespacePrefix + COLON_SEPARATOR
+                                + jmethod.getSimpleName() + RESPONSE, null);
+            }
+        }
+
+        // now add these unique namespaces to the the definitions element
+        Enumeration enumeration = namespaceMap.keys();
+        while (enumeration.hasMoreElements()) {
+            namespaceURI = (String) enumeration.nextElement();
+            definitions.declareNamespace(namespaceURI, (String) namespaceMap
+                    .get(namespaceURI));
+        }
+    }
+
+    /**
+     * Generate the porttypes
+     */
+    private void generatePortType(OMFactory fac, OMElement defintions) {
+        JMethod jmethod = null;
+        OMElement operation = null;
+        OMElement message = null;
+        OMElement portType = fac.createOMElement(PORT_TYPE_LOCAL_NAME, wsdl);
+        defintions.addChild(portType);
+        portType.addAttribute(ATTRIBUTE_NAME, serviceName + PORT_TYPE_SUFFIX,
+                null);
+        //adding message refs
+        for (int i = 0; i < method.length; i++) {
+            jmethod = method[i];
+            operation = fac.createOMElement(OPERATION_LOCAL_NAME, wsdl);
+            portType.addChild(operation);
+            operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(),
+                    null);
+
+            message = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl);
+            message.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
+                    + COLON_SEPARATOR + jmethod.getSimpleName()
+                    + MESSAGE_SUFFIX, null);
+            operation.addChild(message);
+
+            if (!jmethod.getReturnType().isVoidType()) {
+                message = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl);
+                message.addAttribute(MESSAGE_LOCAL_NAME, tns.getPrefix()
+                        + COLON_SEPARATOR + jmethod.getSimpleName()
+                        + RESPONSE_MESSAGE, null);
+                operation.addChild(message);
+            }
+        }
+
+    }
+
+    /**
+     * Generate the service
+     */
+    public void generateService(OMFactory fac, OMElement defintions) {
+        OMElement service = fac.createOMElement(SERVICE_LOCAL_NAME, wsdl);
+        defintions.addChild(service);
+        service.addAttribute(ATTRIBUTE_NAME, serviceName, null);
+        OMElement port = fac.createOMElement(PORT, wsdl);
+        service.addChild(port);
+        port.addAttribute(ATTRIBUTE_NAME, serviceName + SOAP11PORT, null);
+        port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + COLON_SEPARATOR
+                + serviceName + BINDING_NAME_SUFFIX, null);
+        addExtensionElement(fac, port, soap, SOAP_ADDRESS, LOCATION, locationURL
+                + serviceName);
+
+        port = fac.createOMElement(PORT, wsdl);
+        service.addChild(port);
+        port.addAttribute(ATTRIBUTE_NAME, serviceName + SOAP12PORT, null);
+        port.addAttribute(BINDING_LOCAL_NAME, tns.getPrefix() + COLON_SEPARATOR
+                + serviceName + SOAP12BINDING_NAME_SUFFIX, null);
+        addExtensionElement(fac, port, soap12, SOAP_ADDRESS, LOCATION, locationURL
+                + serviceName);
+    }
+
+    /**
+     * Generate the bindings
+     */
+    private void generateBinding(OMFactory fac, OMElement defintions) {
+        generateSoap11Binding(fac, defintions);
+        generateSoap12Binding(fac, defintions);
+    }
+
+    private void generateSoap11Binding(OMFactory fac, OMElement defintions) {
+        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
+        defintions.addChild(binding);
+        binding.addAttribute(ATTRIBUTE_NAME, serviceName + BINDING_NAME_SUFFIX,
+                null);
+        binding.addAttribute("type", tns.getPrefix() + COLON_SEPARATOR
+                + serviceName + PORT_TYPE_SUFFIX, null);
+
+        addExtensionElement(fac, binding, soap, BINDING_LOCAL_NAME, TRANSPORT,
+                TRANSPORT_URI, STYLE, style);
+
+        for (int i = 0; i < method.length; i++) {
+            JMethod jmethod = method[i];
+            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+                    wsdl);
+            binding.addChild(operation);
+
+            addExtensionElement(fac, operation, soap, OPERATION_LOCAL_NAME,
+                    SOAP_ACTION, URN_PREFIX + COLON_SEPARATOR
+                    + jmethod.getSimpleName(), STYLE, style);
+            operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(),
+                    null);
+
+            OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl);
+            addExtensionElement(fac, input, soap, SOAP_BODY, SOAP_USE, use,
+                    "namespace", targetNamespace);
+            operation.addChild(input);
+
+            if (!jmethod.getReturnType().isVoidType()) {
+                OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl);
+                addExtensionElement(fac, output, soap, SOAP_BODY, SOAP_USE, use,
+                        "namespace", targetNamespace);
+                operation.addChild(output);
+            }
+        }
+    }
+
+    private void generateSoap12Binding(OMFactory fac, OMElement defintions) {
+        OMElement binding = fac.createOMElement(BINDING_LOCAL_NAME, wsdl);
+        defintions.addChild(binding);
+        binding.addAttribute(ATTRIBUTE_NAME, serviceName + SOAP12BINDING_NAME_SUFFIX,
+                null);
+        binding.addAttribute("type", tns.getPrefix() + COLON_SEPARATOR
+                + serviceName + PORT_TYPE_SUFFIX, null);
+
+        addExtensionElement(fac, binding, soap12, BINDING_LOCAL_NAME, TRANSPORT,
+                TRANSPORT_URI, STYLE, style);
+
+        for (int i = 0; i < method.length; i++) {
+            JMethod jmethod = method[i];
+            OMElement operation = fac.createOMElement(OPERATION_LOCAL_NAME,
+                    wsdl);
+            binding.addChild(operation);
+            operation.declareNamespace(URI_WSDL12_SOAP, SOAP12_PREFIX);
+
+            addExtensionElement(fac, operation, soap12, OPERATION_LOCAL_NAME,
+                    SOAP_ACTION, URN_PREFIX + COLON_SEPARATOR
+                    + jmethod.getSimpleName(), STYLE, style);
+            operation.addAttribute(ATTRIBUTE_NAME, jmethod.getSimpleName(),
+                    null);
+
+            OMElement input = fac.createOMElement(IN_PUT_LOCAL_NAME, wsdl);
+            addExtensionElement(fac, input, soap12, SOAP_BODY, SOAP_USE, use,
+                    "namespace", targetNamespace);
+            operation.addChild(input);
+
+            if (!jmethod.getReturnType().isVoidType()) {
+            OMElement output = fac.createOMElement(OUT_PUT_LOCAL_NAME, wsdl);
+                addExtensionElement(fac, output, soap12, SOAP_BODY, SOAP_USE, use,
+                        "namespace", targetNamespace);
+            operation.addChild(output);
+        }
+    }
+    }
+
+//    private void addExtensionElement(OMFactory fac, OMElement element, String name, OMNamespace namespace,
+//                                     Hashtable attrs) {
+//        OMElement soapbinding = fac.createOMElement(name, namespace);
+//        element.addChild(soapbinding);
+//        Enumeration enumeration = attrs.keys();
+//        String attrName = null;
+//        while (enumeration.hasMoreElements()) {
+//            attrName = (String) enumeration.nextElement();
+//            soapbinding.addAttribute(attrName, (String) attrs.get(attrName), null);
+//        }
+//    }
+
+    private void addExtensionElement(OMFactory fac, OMElement element, OMNamespace namespace,
+                                     String name, String att1Name, String att1Value, String att2Name,
+                                     String att2Value) {
+        OMElement soapbinding = fac.createOMElement(name, namespace);
+        element.addChild(soapbinding);
+        soapbinding.addAttribute(att1Name, att1Value, null);
+        soapbinding.addAttribute(att2Name, att2Value, null);
+    }
+
+    private void addExtensionElement(OMFactory fac, OMElement element, OMNamespace namespace,
+                                     String name, String att1Name, String att1Value) {
+        OMElement soapbinding = fac.createOMElement(name, namespace);
+        element.addChild(soapbinding);
+        soapbinding.addAttribute(att1Name, att1Value, null);
+    }
+
+    private String generatePrefix() {
+        return NAMESPACE_PREFIX + prefixCount++;
+    }
+
+}

Propchange: incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/tools/src/main/java/org/apache/tuscany/tools/java2wsdl/generate/TuscanyJava2OMBuilder.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org