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