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 am...@apache.org on 2007/03/20 07:20:40 UTC

svn commit: r520296 - in /webservices/axis2/trunk/java/modules: adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java

Author: amilas
Date: Mon Mar 19 23:20:39 2007
New Revision: 520296

URL: http://svn.apache.org/viewvc?view=rev&rev=520296
Log:
Improved the adb performance by directly calling to serialize method always.
Fixed the operation parameter order problem. But still comment the code which causes the jaxws fail.

Modified:
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl?view=diff&rev=520296&r1=520295&r2=520296
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl Mon Mar 19 23:20:39 2007
@@ -675,36 +675,38 @@
                final javax.xml.namespace.QName parentQName,
                final org.apache.axiom.om.OMFactory factory){
 
-        org.apache.axiom.om.OMDataSource dataSource = getOMDataSource(parentQName, factory);
 
         <xsl:choose>
             <xsl:when test="@type">
+               org.apache.axiom.om.OMDataSource dataSource =
+                       new org.apache.axis2.databinding.ADBDataSource(this,parentQName){
+
+                 public void serialize(javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
+                       <xsl:value-of select="$name"/>.this.serialize(parentQName,factory,xmlWriter);
+                 }
+               };
                return new org.apache.axiom.om.impl.llom.OMSourcedElementImpl(
                parentQName,factory,dataSource);
             </xsl:when>
             <xsl:otherwise>
+                org.apache.axiom.om.OMDataSource dataSource =
+                       new org.apache.axis2.databinding.ADBDataSource(this,MY_QNAME){
+
+                 public void serialize(javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
+                       <xsl:value-of select="$name"/>.this.serialize(MY_QNAME,factory,xmlWriter);
+                 }
+               };
                return new org.apache.axiom.om.impl.llom.OMSourcedElementImpl(
                MY_QNAME,factory,dataSource);
             </xsl:otherwise>
        </xsl:choose>
        }
 
-     /**
-     *
-     * @param parentQName
-     * @param factory
-     * @return org.apache.axiom.om.OMElement
-     */
-    public org.apache.axiom.om.OMDataSource getOMDataSource(
-            final javax.xml.namespace.QName parentQName,
-            final org.apache.axiom.om.OMFactory factory){
 
 
-        org.apache.axiom.om.OMDataSource dataSource =
-                       new org.apache.axis2.databinding.ADBDataSource(this,parentQName){
-
-         public void serialize(
-                                  javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
+         public void serialize(final javax.xml.namespace.QName parentQName,
+                               final org.apache.axiom.om.OMFactory factory,
+                               javax.xml.stream.XMLStreamWriter xmlWriter) throws javax.xml.stream.XMLStreamException {
             <xsl:choose>
 
             <xsl:when test="$simple and $union">
@@ -925,18 +927,16 @@
                                       writeAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","nil","1",xmlWriter);
                                       xmlWriter.writeEndElement();
                                     }else{
-                                     <xsl:value-of select="$varName"/>.getOMDataSource(
-                                       new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
-                                        factory).serialize(xmlWriter);
+                                     <xsl:value-of select="$varName"/>.serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
+                                        factory,xmlWriter);
                                     }
                                 </xsl:when>
                                 <xsl:otherwise>
                                     if (<xsl:value-of select="$varName"/>==null){
                                          throw new RuntimeException("<xsl:value-of select="$propertyName"/> cannot be null!!");
                                     }
-                                   <xsl:value-of select="$varName"/>.getOMDataSource(
-                                       new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
-                                       factory).serialize(xmlWriter);
+                                   <xsl:value-of select="$varName"/>.serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
+                                       factory,xmlWriter);
                                 </xsl:otherwise>
                             </xsl:choose>
                         </xsl:when>
@@ -944,9 +944,8 @@
                              if (<xsl:value-of select="$varName"/>!=null){
                                     for (int i = 0;i &lt; <xsl:value-of select="$varName"/>.length;i++){
                                         if (<xsl:value-of select="$varName"/>[i] != null){
-                                         <xsl:value-of select="$varName"/>[i].getOMDataSource(
-                                                   new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
-                                                   factory).serialize(xmlWriter);
+                                         <xsl:value-of select="$varName"/>[i].serialize(new javax.xml.namespace.QName("<xsl:value-of select="$namespace"/>","<xsl:value-of select="$propertyName"/>"),
+                                                   factory,xmlWriter);
                                         } else {
                                            <xsl:choose>
                                             <xsl:when test="@nillable">
@@ -1501,18 +1500,14 @@
                                         writeAttribute("xsi","http://www.w3.org/2001/XMLSchema-instance","nil","1",xmlWriter);
                                         xmlWriter.writeEndElement();
                                        }else{
-                                         <xsl:value-of select="$varName"/>.getOMDataSource(
-                                         MY_QNAME,
-                                         factory).serialize(xmlWriter);
+                                         <xsl:value-of select="$varName"/>.serialize(MY_QNAME,factory,xmlWriter);
                                        }
                             </xsl:when>
                             <xsl:otherwise>
                                  if (<xsl:value-of select="$varName"/>==null){
                                    throw new RuntimeException("Property cannot be null!");
                                  }
-                                 <xsl:value-of select="$varName"/>.getOMDataSource(
-                                         MY_QNAME,
-                                         factory).serialize(xmlWriter);
+                                 <xsl:value-of select="$varName"/>.serialize(MY_QNAME,factory,xmlWriter);
                             </xsl:otherwise>
                         </xsl:choose>
                     </xsl:when>
@@ -1728,10 +1723,7 @@
           private java.lang.String createPrefix() {
                 return "ns" + (int)Math.random();
           }
-        };
 
-        return dataSource;
-    }
 
   <!-- ######################################################################################### -->
         /**

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java?view=diff&rev=520296&r1=520295&r2=520296
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/WSDL11ToAxisServiceBuilder.java Mon Mar 19 23:20:39 2007
@@ -67,12 +67,7 @@
 import javax.xml.parsers.ParserConfigurationException;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
+import java.util.*;
 
 /*
  * Copyright 2004,2005 The Apache Software Foundation.
@@ -465,7 +460,7 @@
 
                 axisBindingInMessage.setAxisMessage(axisInMessage);
                 axisBindingInMessage.setDirection(axisInMessage.getDirection());
-                
+
                 axisBindingOperation
                         .addChild(axisBindingInMessage.getDirection(), axisBindingInMessage);
             }
@@ -587,7 +582,7 @@
         return schemaMap;
     }
 
-   
+
 
     /**
      * return the service to process
@@ -1274,36 +1269,30 @@
 
             if (bindingInput != null) {
 
-                Iterator partsIterator = null;
+                Collection partsCollection = null;
                 if (BINDING_TYPE_SOAP.equals(this.bindingType)) {
                     // first see the body parts list
                     List bodyPartsList =
                             getPartsListFromSoapBody(bindingInput.getExtensibilityElements());
                     if (bodyPartsList != null) {
-                        partsIterator = message.getOrderedParts(bodyPartsList).iterator();
+                        partsCollection = message.getOrderedParts(bodyPartsList);
                     } else {
-                        // then see the parameter order
-                        List parameterOrder = operation.getOperation().getParameterOrdering();
-                        if (parameterOrder != null) {
-                            partsIterator = message.getOrderedParts(parameterOrder).iterator();
-                        } else {
-                            // finally get the message part list
-                            partsIterator = message.getParts().values().iterator();
-                        }
-
+                        partsCollection = message.getParts().values();
                     }
                 } else {
                     // i.e http binding
-                    partsIterator = message.getParts().values().iterator();
+                    partsCollection = message.getParts().values();
                 }
 
-
+                List parameterOrder = operation.getOperation().getParameterOrdering();
                 namespaceImportsMap = new HashMap();
                 namespacePrefixMap = new HashMap();
 
                 Node newComplexType = getNewComplextType(document,
                                                          xsdPrefix,
-                                                         partsIterator,
+                                                         partsCollection,
+                                                         parameterOrder,
+                                                         false,
                                                          namespaceImportsMap,
                                                          namespacePrefixMap);
 
@@ -1368,33 +1357,24 @@
             Message message = (Message) operationToOutputMessageMap.get(operation);
 
             if (bindingOutput != null) {
-                Iterator partsIterator = null;
+                Collection partsCollection = null;
                 if (BINDING_TYPE_SOAP.equals(this.bindingType)) {
                     // first see the body parts list
                     List bodyPartsList =
                             getPartsListFromSoapBody(bindingOutput.getExtensibilityElements());
                     if (bodyPartsList != null) {
-                        bodyPartsList.add("result");
-                        partsIterator = message.getOrderedParts(bodyPartsList).iterator();
+                        partsCollection = message.getOrderedParts(bodyPartsList);
                     } else {
                         // then see the parameter order
-                        List parameterOrder = operation.getOperation().getParameterOrdering();
-                        if (parameterOrder != null) {
-                            parameterOrder = new ArrayList(parameterOrder);
-
-                            parameterOrder.add("result");
-                            partsIterator = message.getOrderedParts(parameterOrder).iterator();
-                        } else {
-                            // finally get the message part list
-                            partsIterator = message.getParts().values().iterator();
-                        }
-
+                        partsCollection = message.getParts().values();
                     }
                 } else {
                     // i.e if http binding
-                    partsIterator = message.getParts().values().iterator();
+                    partsCollection = message.getParts().values();
                 }
 
+                List parameterOrder = operation.getOperation().getParameterOrdering();
+
                 // we have to initialize the hash maps always since we add the elements onece we
                 // generate it
                 namespacePrefixMap = new HashMap();
@@ -1402,7 +1382,9 @@
 
                 Node newComplexType = getNewComplextType(document,
                                                          xsdPrefix,
-                                                         partsIterator,
+                                                         partsCollection,
+                                                         parameterOrder,
+                                                         true,
                                                          namespaceImportsMap,
                                                          namespacePrefixMap);
                 elementDeclaration.appendChild(newComplexType);
@@ -1578,15 +1560,19 @@
      *
      * @param document
      * @param xsdPrefix
-     * @param partsIterator
+     * @param partsCollection - parts to be added
+     * @param parameterOrder - param Order list if it is given
+     * @param isOutMessage
      * @param namespaceImportsMap
      * @param namespacePrefixMap
-     * @return the new complex type element
+     * @return new element
      */
 
     private Element getNewComplextType(Document document,
                                        String xsdPrefix,
-                                       Iterator partsIterator,
+                                       Collection partsCollection,
+                                       List parameterOrder,
+                                       boolean isOutMessage,
                                        Map namespaceImportsMap,
                                        Map namespacePrefixMap) {
         // add the complex type
@@ -1597,69 +1583,129 @@
         Element cmplxTypeSequence = document.createElementNS(
                 XMLSCHEMA_NAMESPACE_URI, xsdPrefix + ":"
                 + XML_SCHEMA_SEQUENCE_LOCAL_NAME);
-        Element child;
+
         Part part;
+        if ((parameterOrder == null) || (parameterOrder.size() == 0)) {
+            // no parameter order then just add the elements in the parts collection
+            for (Iterator partsIter = partsCollection.iterator(); partsIter.hasNext();) {
+                part = (Part) partsIter.next();
+                // the part name
+                addPartToElement(part,
+                        document,
+                        xsdPrefix,
+                        namespaceImportsMap,
+                        namespacePrefixMap,
+                        cmplxTypeSequence);
 
-        while (partsIterator.hasNext()) {
-            part = (Part) partsIterator.next();
-            // the part name
-            String elementName = part.getName();
-
-            // the type name
-            QName schemaTypeName = part.getTypeName();
-
-            if (schemaTypeName != null) {
-
-                child = document.createElementNS(XMLSCHEMA_NAMESPACE_URI,
-                                                 xsdPrefix + ":" + XML_SCHEMA_ELEMENT_LOCAL_NAME);
-                // always child attribute should be in no namespace
-                child.setAttribute("form", "unqualified");
-
-                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, 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 {
+            // i.e an parts order is given
+            // first populate all the parts to a map
+            Map partsMap = new HashMap();
+            for (Iterator partsIter = partsCollection.iterator(); partsIter.hasNext();){
+               part = (Part) partsIter.next();
+               partsMap.put(part.getName(),part);
+            }
+
+            String partName;
+            for (Iterator paramOrderIter = parameterOrder.iterator(); paramOrderIter.hasNext();) {
+                partName = (String) paramOrderIter.next();
+                part = (Part) partsMap.get(partName);
+                if (part != null) {
+                    addPartToElement(part,
+                            document,
+                            xsdPrefix,
+                            namespaceImportsMap,
+                            namespacePrefixMap,
+                            cmplxTypeSequence);
+                    partsMap.remove(partName);
+                }
+            }
+            // if this is an out put message then we have to set the
+            // return type if exists
+            if (isOutMessage) {
+                if (partsMap.size() > 0) {
+                    if (partsMap.size() == 1) {
+                        part = (Part) partsMap.values().iterator().next();
+                        // change the name of this part
+                        // this is the return type and its name should be result
+//                        part.setName("result");
+//                        addPartToElement(part,
+//                            document,
+//                            xsdPrefix,
+//                            namespaceImportsMap,
+//                            namespacePrefixMap,
+//                            cmplxTypeSequence);
                     } else {
-                        // this URI should be already in the namspace prefix
-                        // map
-                        prefix = (String) namespacePrefixMap.get(uri);
+                        throw new WSDLProcessingException("the parameter order can left atmost" +
+                                " one part");
                     }
-
                 }
+            }
+        }
+
+        newComplexType.appendChild(cmplxTypeSequence);
+        return newComplexType;
+    }
+
+    private void addPartToElement(Part part,
+                                  Document document,
+                                  String xsdPrefix,
+                                  Map namespaceImportsMap,
+                                  Map namespacePrefixMap,
+                                  Element cmplxTypeSequence) {
+        Element child;
+        String elementName = part.getName();
 
-                child.setAttribute(XSD_NAME, elementName);
-                child.setAttribute(XSD_TYPE, prefix + ":" + schemaTypeName.getLocalPart());
+        // the type name
+        QName schemaTypeName = part.getTypeName();
 
+        if (schemaTypeName != null) {
 
-                cmplxTypeSequence.appendChild(child);
+            child = document.createElementNS(XMLSCHEMA_NAMESPACE_URI,
+                                             xsdPrefix + ":" + XML_SCHEMA_ELEMENT_LOCAL_NAME);
+            // always child attribute should be in no namespace
+            child.setAttribute("form", "unqualified");
 
+            String prefix;
+            if (XMLSCHEMA_NAMESPACE_URI.equals(schemaTypeName.getNamespaceURI())) {
+                prefix = xsdPrefix;
             } else {
-                // see the basic profile 4.4.1 for rpc-literal messages parts can have only types
-                throw new WSDLProcessingException("RPC-literal type message part " +
-                        part.getName() + "should have a type attribute ");
+                // 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, 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);
+                }
+
             }
 
+            child.setAttribute(XSD_NAME, elementName);
+            child.setAttribute(XSD_TYPE, prefix + ":" + schemaTypeName.getLocalPart());
+            cmplxTypeSequence.appendChild(child);
+
+        } else {
+            // see the basic profile 4.4.1 for rpc-literal messages parts can have only types
+            throw new WSDLProcessingException("RPC-literal type message part " +
+                    part.getName() + " should have a type attribute ");
         }
-        newComplexType.appendChild(cmplxTypeSequence);
-        return newComplexType;
     }
 
     /**



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