You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by aj...@apache.org on 2005/12/11 03:01:34 UTC

svn commit: r355868 - /webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java

Author: ajith
Date: Sat Dec 10 18:01:27 2005
New Revision: 355868

URL: http://svn.apache.org/viewcvs?rev=355868&view=rev
Log:
1. Updated the WSDLPump so that it handles part element references properly in the rpc/lit case

Modified:
    webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java

Modified: webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java?rev=355868&r1=355867&r2=355868&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java (original)
+++ webservices/axis2/trunk/java/modules/wsdl/src/org/apache/axis2/wsdl/builder/wsdl4j/WSDLPump.java Sat Dec 10 18:01:27 2005
@@ -25,8 +25,6 @@
 import org.apache.wsdl.impl.WSDLProcessingException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
 
 import javax.wsdl.*;
 import javax.wsdl.extensions.ExtensibilityElement;
@@ -53,16 +51,13 @@
     private static final String XML_SCHEMA_COMPLEX_TYPE_LOCAL_NAME = "complexType";
     private static final String XML_SCHEMA_ELEMENT_LOCAL_NAME = "element";
     private static final String XML_SCHEMA_IMPORT_LOCAL_NAME = "import";
-    private static final String XSD_SCHEMA_QUALIFIED_NAME =XMLSCHEMA_NAMESPACE_PREFIX + ":"+XML_SCHEMA_LOCAL_NAME;
-    private static final String XSD_SEQUENCE_QUALIFIED_NAME =XMLSCHEMA_NAMESPACE_PREFIX + ":"+XML_SCHEMA_SEQUENCE_LOCAL_NAME;
-    private static final String XSD_COMPLEXTYPE_QUALIFIED_NAME = XMLSCHEMA_NAMESPACE_PREFIX + ":"+XML_SCHEMA_COMPLEX_TYPE_LOCAL_NAME;
-    private static final String XSD_ELEMENT_QUALIFIED_NAME = XMLSCHEMA_NAMESPACE_PREFIX + ":"+XML_SCHEMA_ELEMENT_LOCAL_NAME;
 
     private static final String XSD_NAME = "name";
     private static final String XSD_TARGETNAMESPACE = "targetNamespace";
     private static final String XMLNS_AXIS2WRAPPED = "xmlns:axis2wrapped";
     private static final String AXIS2WRAPPED = "axis2wrapped";
     private static final String XSD_TYPE = "type";
+    private static final String XSD_REF = "ref";
     private static final String BOUND_INTERFACE_NAME = "BoundInterface";
 
 
@@ -76,8 +71,6 @@
 
     private Map declaredNameSpaces=null;
 
-    private List resolvedMultipartMessageList = new LinkedList();
-
     private Map resolvedRpcWrappedElementMap = new HashMap();
     private static final String XSD_ELEMENT_FORM_DEFAULT = "elementFormDefault";
     private static final String XSD_UNQUALIFIED = "unqualified";
@@ -176,7 +169,7 @@
             wsdlInterface = this.wsdlComponentFactory.createInterface();
             portType = (PortType) portTypeIterator.next();
             //////////////////////////
-            this.populateInterfaces(wsdlInterface, portType,wsdl4JDefinition);
+            this.populateInterfaces(wsdlInterface, portType);
             /////////////////////////
             this.copyExtensibilityAttribute(portType.getExtensionAttributes(),
                     wsdlInterface);
@@ -234,7 +227,7 @@
     // FIXME Evaluate a way of injecting features and priperties with a general
     // formatted input
     private void populateInterfaces(WSDLInterface wsdlInterface,
-                                    PortType wsdl4jPortType,Definition wsdl4jDefinition) {
+                                    PortType wsdl4jPortType) {
 
         //Copy the Attribute information items
         //Copied with the Same QName so it will require no Query in Binding
@@ -335,7 +328,7 @@
         Part part;
         while (!wrappable && parts.hasNext()) {
             part = (Part) parts.next();
-            wrappable = wrappable || (part.getTypeName()!=null);
+            wrappable = (part.getTypeName() != null) || wrappable;
         }
 
 
@@ -597,7 +590,8 @@
         }
 
         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
-        // Now we have the message list to process - Process it
+        // Now we have the message list to process - Process the whole list of messages at once
+        //since
         ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
         List resolvedMessageQNames = new ArrayList();
         //find the xsd prefix
@@ -607,65 +601,82 @@
         Document document = getDOMDocumentBuilder().newDocument();
         for (int i = 0; i < keys.length; i++) {
             wsdl4jMessage = (Message)messagesMap.get(keys[i]);
-            if (findWrapppable(wsdl4jMessage)){
-                //This message is wrappabel. However we need to see whether the message is already
-                //resolved!
-                if (!resolvedMessageQNames.contains(wsdl4jMessage.getQName())){
-                    //This message has not been touched before!. So we can go ahead now
-                    Map parts = wsdl4jMessage.getParts();
-                    //add the complex type
-                    String name = wsdl4jMessage.getQName().getLocalPart();
-                    Element newComplexType = document.createElementNS(WSDLPump.XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"+ XML_SCHEMA_COMPLEX_TYPE_LOCAL_NAME);
-                    newComplexType.setAttribute(WSDLPump.XSD_NAME, name);
-
-                    Element cmplxContentSequence = document.createElementNS(WSDLPump.XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"+ XML_SCHEMA_SEQUENCE_LOCAL_NAME);
-                    Element child = null;
-                    Iterator iterator = parts.keySet().iterator();
-                    while (iterator.hasNext()) {
-                        Part part = (Part) parts.get(iterator.next());
-                        //the part name
-                        String elementName = part.getName();
-                        //the type name
-                        QName schemaTypeName = part.getTypeName();
-                        child = document.createElementNS(XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"+ XML_SCHEMA_ELEMENT_LOCAL_NAME);
-                        child.setAttribute(WSDLPump.XSD_NAME, elementName);
-                        String prefix;
-                        if (XMLSCHEMA_NAMESPACE_URI.equals(schemaTypeName.getNamespaceURI())){
-                            prefix = xsdPrefix;
-                        }else{
-                            //this schema is a third party one. So we need to have an import statement in our generated schema
-                            String uri = schemaTypeName.getNamespaceURI();
-                            if (!namespaceImportsMap.containsKey(uri)){
-                                //create Element for namespace import
-                                Element namespaceImport = document.createElementNS(XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"+ XML_SCHEMA_IMPORT_LOCAL_NAME);
-                                namespaceImport.setAttribute("namespace",uri);
-                                //add this to the map
-                                namespaceImportsMap.put(uri,namespaceImport);
-                                //we also need to associate this uri with a prefix and include that prefix
-                                //in the schema's namspace declarations. So add theis particular namespace to the
-                                //prefix map as well
-                                prefix = getTemporaryNamespacePrefix();
-                                namespacePrefixMap.put(uri,prefix);
-                            }else{
-                                //this URI should be already in the namspace prefix map
-                                prefix = (String)namespacePrefixMap.get(uri);
-                            }
+            //No need to chack the wrappable
 
+            //This message is wrappabel. However we need to see whether the message is already
+            //resolved!
+            if (!resolvedMessageQNames.contains(wsdl4jMessage.getQName())){
+                //This message has not been touched before!. So we can go ahead now
+                Map parts = wsdl4jMessage.getParts();
+                //add the complex type
+                String name = wsdl4jMessage.getQName().getLocalPart();
+                Element newComplexType = document.createElementNS(WSDLPump.XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"+ XML_SCHEMA_COMPLEX_TYPE_LOCAL_NAME);
+                newComplexType.setAttribute(WSDLPump.XSD_NAME, name);
+
+                Element cmplxContentSequence = document.createElementNS(WSDLPump.XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"+ XML_SCHEMA_SEQUENCE_LOCAL_NAME);
+                Element child;
+                Iterator iterator = parts.keySet().iterator();
+                while (iterator.hasNext()) {
+                    Part part = (Part) parts.get(iterator.next());
+                    //the part name
+                    String elementName = part.getName();
+                    boolean isTyped = true;
+                    //the type name
+                    QName schemaTypeName;
+                    if (part.getTypeName()!=null){
+                        schemaTypeName = part.getTypeName();
+                    }else if (part.getElementName()!=null){
+                        schemaTypeName = part.getElementName();
+                        isTyped = false;
+                    }else{
+                        throw new RuntimeException(" Unqualified Message part!");
+                    }
 
+                    child = document.createElementNS(XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"+ XML_SCHEMA_ELEMENT_LOCAL_NAME);
+
+                    String prefix;
+                    if (XMLSCHEMA_NAMESPACE_URI.equals(schemaTypeName.getNamespaceURI())){
+                        prefix = xsdPrefix;
+                    }else{
+                        //this schema is a third party one. So we need to have an import statement in our generated schema
+                        String uri = schemaTypeName.getNamespaceURI();
+                        if (!namespaceImportsMap.containsKey(uri)){
+                            //create Element for namespace import
+                            Element namespaceImport = document.createElementNS(XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"+ XML_SCHEMA_IMPORT_LOCAL_NAME);
+                            namespaceImport.setAttribute("namespace",uri);
+                            //add this to the map
+                            namespaceImportsMap.put(uri,namespaceImport);
+                            //we also need to associate this uri with a prefix and include that prefix
+                            //in the schema's namspace declarations. So add theis particular namespace to the
+                            //prefix map as well
+                            prefix = getTemporaryNamespacePrefix();
+                            namespacePrefixMap.put(uri,prefix);
+                        }else{
+                            //this URI should be already in the namspace prefix map
+                            prefix = (String)namespacePrefixMap.get(uri);
                         }
 
+
+                    }
+                    // If it's from a type the element we need to add a name and the type
+                    //if not it's the element reference
+                    if (isTyped){
+                        child.setAttribute(WSDLPump.XSD_NAME, elementName);
                         child.setAttribute(WSDLPump.XSD_TYPE, prefix +":"+schemaTypeName.getLocalPart());
-                        cmplxContentSequence.appendChild(child);
+                    }else{
+                        child.setAttribute(WSDLPump.XSD_REF, prefix +":"+schemaTypeName.getLocalPart());
                     }
-                    newComplexType.appendChild(cmplxContentSequence);
-                    //add this newly created complextype to the list
-                    complexTypeElementsMap.put(wsdl4jMessage.getQName(),newComplexType);
-                    resolvedMessageQNames.add(wsdl4jMessage.getQName());
+                    cmplxContentSequence.appendChild(child);
                 }
+                newComplexType.appendChild(cmplxContentSequence);
+                //add this newly created complextype to the list
+                complexTypeElementsMap.put(wsdl4jMessage.getQName(),newComplexType);
+                resolvedMessageQNames.add(wsdl4jMessage.getQName());
             }
+          
         }
 
-        Element elementDeclaration  = null;
+        Element elementDeclaration;
 
 
         //loop through the input op map and generate the elements
@@ -741,7 +752,7 @@
                 XMLNS_AXIS2WRAPPED,
                 targetNamespaceUri);
         schemaElement.setAttribute(XSD_TARGETNAMESPACE,targetNamespaceUri);
-        schemaElement.setAttribute(XSD_ELEMENT_FORM_DEFAULT,XSD_UNQUALIFIED); 
+        schemaElement.setAttribute(XSD_ELEMENT_FORM_DEFAULT,XSD_UNQUALIFIED);
 
         Element[] namespaceImports = (Element[])namespaceImportsMap.values().toArray(new Element[namespaceImportsMap.size()]);
         for (int i = 0; i < namespaceImports.length; i++) {
@@ -763,7 +774,7 @@
         }
 
 
-        System.out.println("schemaElement = " + schemaElement);
+
 
         return schemaElement;
     }
@@ -777,7 +788,6 @@
      */
     private QName generateReferenceQname(QName outerName,Message wsdl4jMessage,boolean isWrappable) {
         QName referenceQName = null;
-        String xsdPrefix = findSchemaPrefix();
         if (isWrappable) {
             //The schema for this should be already made ! Find the QName from the list
             referenceQName=(QName)resolvedRpcWrappedElementMap.get(outerName.getLocalPart());
@@ -1162,14 +1172,9 @@
     }
 
     /**
-     *
-     * @return
-     */
-    private String getTemporaryNamespaceUri(){
-        return "urn:tempNs"+nsCount++ ;
-    }
 
-    /**
+
+     /**
      *
      * @return
      */