You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by am...@apache.org on 2007/02/22 08:10:02 UTC

svn commit: r510430 - in /webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema: ExtensionUtility.java template/ADBDatabindingTemplate.xsl

Author: amilas
Date: Wed Feb 21 23:10:02 2007
New Revision: 510430

URL: http://svn.apache.org/viewvc?view=rev&rev=510430
Log:
Add unwrapping support

Modified:
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBDatabindingTemplate.xsl

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java?view=diff&rev=510430&r1=510429&r2=510430
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/ExtensionUtility.java Wed Feb 21 23:10:02 2007
@@ -137,7 +137,17 @@
                             WSDLConstants.MESSAGE_LABEL_IN_VALUE),
                             mapper,
                             schemaMap,
-                            op.getName().getLocalPart());
+                            op.getName().getLocalPart(),
+                            WSDLConstants.INPUT_PART_QNAME_SUFFIX);
+                }
+
+                if (WSDLUtil.isOutputPresentForMEP(op.getMessageExchangePattern())) {
+                    walkSchema(op.getMessage(
+                            WSDLConstants.MESSAGE_LABEL_OUT_VALUE),
+                            mapper,
+                            schemaMap,
+                            op.getName().getLocalPart(),
+                            WSDLConstants.OUTPUT_PART_QNAME_SUFFIX);
                 }
 
 
@@ -211,27 +221,36 @@
     private static void walkSchema(AxisMessage message,
                                    TypeMapper mapper,
                                    Map schemaMap,
-                                   String opName) {
+                                   String opName,
+                                   String qnameSuffix) {
 
         if (message.getParameter(Constants.UNWRAPPED_KEY) != null) {
             XmlSchemaType schemaType = message.getSchemaElement().getSchemaType();
             //create a type mapper
-            processXMLSchemaComplexType(schemaType, mapper, opName, schemaMap);
+            processXMLSchemaComplexType(schemaType, mapper, opName, schemaMap, qnameSuffix);
         }
     }
 
-    private static void processXMLSchemaComplexType(XmlSchemaType schemaType, TypeMapper mapper, String opName, Map schemaMap) {
+    private static void processXMLSchemaComplexType(XmlSchemaType schemaType,
+                                                    TypeMapper mapper,
+                                                    String opName,
+                                                    Map schemaMap,
+                                                    String qnameSuffix) {
         if (schemaType instanceof XmlSchemaComplexType) {
             XmlSchemaComplexType cmplxType = (XmlSchemaComplexType) schemaType;
             if (cmplxType.getContentModel() == null) {
-                processSchemaSequence(cmplxType.getParticle(), mapper, opName, schemaMap);
+                processSchemaSequence(cmplxType.getParticle(), mapper, opName, schemaMap, qnameSuffix);
             } else {
-                processComplexContentModel(cmplxType, mapper, opName, schemaMap);
+                processComplexContentModel(cmplxType, mapper, opName, schemaMap, qnameSuffix);
             }
         }
     }
 
-    private static void processComplexContentModel(XmlSchemaComplexType cmplxType, TypeMapper mapper, String opName, Map schemaMap) {
+    private static void processComplexContentModel(XmlSchemaComplexType cmplxType,
+                                                   TypeMapper mapper,
+                                                   String opName,
+                                                   Map schemaMap,
+                                                   String qnameSuffix) {
         XmlSchemaContentModel contentModel = cmplxType.getContentModel();
         if (contentModel instanceof XmlSchemaComplexContent) {
             XmlSchemaComplexContent xmlSchemaComplexContent = (XmlSchemaComplexContent) contentModel;
@@ -240,7 +259,7 @@
                 XmlSchemaComplexContentExtension schemaExtension = (XmlSchemaComplexContentExtension) content;
 
                 // process particles inside this extension, if any
-                processSchemaSequence(schemaExtension.getParticle(), mapper, opName, schemaMap);
+                processSchemaSequence(schemaExtension.getParticle(), mapper, opName, schemaMap, qnameSuffix);
 
                 // now we need to get the schema of the extension type from the parent schema. For that let's first retrieve
                 // the parent schema
@@ -250,12 +269,16 @@
 
                 XmlSchemaType extensionSchemaType = parentSchema.getTypeByName(schemaExtension.getBaseTypeName());
 
-                processXMLSchemaComplexType(extensionSchemaType, mapper, opName, schemaMap);
+                processXMLSchemaComplexType(extensionSchemaType, mapper, opName, schemaMap, qnameSuffix);
             }
         }
     }
 
-    private static void processSchemaSequence(XmlSchemaParticle particle, TypeMapper mapper, String opName, Map schemaMap) {
+    private static void processSchemaSequence(XmlSchemaParticle particle,
+                                              TypeMapper mapper,
+                                              String opName,
+                                              Map schemaMap,
+                                              String qnameSuffix) {
         if (particle instanceof XmlSchemaSequence) {
             XmlSchemaObjectCollection items =
                     ((XmlSchemaSequence) particle).getItems();
@@ -270,7 +293,7 @@
                     XmlSchemaType eltSchemaType = xmlSchemaElement.getSchemaType();
                     if (eltSchemaType != null) {
                         //there is a schema type object.We can utilize that
-                        populateClassName(eltSchemaType, mapper, opName, xmlSchemaElement);
+                        populateClassName(eltSchemaType, mapper, opName, xmlSchemaElement, qnameSuffix);
                     } else if (xmlSchemaElement.getSchemaTypeName() != null) {
                         //there is no schema type object but there is a
                         //schema type QName.  Use that Qname to look up the
@@ -278,10 +301,10 @@
                         eltSchemaType = findSchemaType(schemaMap,
                                 xmlSchemaElement.getSchemaTypeName());
                         if (eltSchemaType != null) {
-                            populateClassName(eltSchemaType, mapper, opName, xmlSchemaElement);
+                            populateClassName(eltSchemaType, mapper, opName, xmlSchemaElement, qnameSuffix);
                         } else if (xmlSchemaElement.getSchemaTypeName().equals(SchemaConstants.XSD_ANYTYPE)) {
                             QName partQName = WSDLUtil.getPartQName(opName,
-                                    WSDLConstants.INPUT_PART_QNAME_SUFFIX,
+                                    qnameSuffix,
                                     xmlSchemaElement.getName());
 
                             if (xmlSchemaElement.getMaxOccurs() > 1) {
@@ -300,7 +323,7 @@
                     XmlSchemaAny xmlSchemaAny = (XmlSchemaAny) item;
 
                     QName partQName = WSDLUtil.getPartQName(opName,
-                            WSDLConstants.INPUT_PART_QNAME_SUFFIX,
+                            qnameSuffix,
                             Constants.ANY_ELEMENT_FIELD_NAME);
 
                     if (((XmlSchemaAny) item).getMaxOccurs() > 1) {
@@ -326,7 +349,8 @@
     private static void  populateClassName(XmlSchemaType eltSchemaType,
                                           TypeMapper typeMap,
                                           String opName,
-                                          XmlSchemaElement xmlSchemaElement) {
+                                          XmlSchemaElement xmlSchemaElement,
+                                          String qnameSuffix) {
 
         boolean isArray = xmlSchemaElement.getMaxOccurs() > 1;
 
@@ -348,7 +372,7 @@
 
 
             QName partQName = WSDLUtil.getPartQName(opName,
-                    WSDLConstants.INPUT_PART_QNAME_SUFFIX,
+                    qnameSuffix,
                     xmlSchemaElement.getName());
             typeMap.addTypeMappingName(partQName, className);
             if (Boolean.TRUE.equals(

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBDatabindingTemplate.xsl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBDatabindingTemplate.xsl?view=diff&rev=510430&r1=510429&r2=510430
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBDatabindingTemplate.xsl (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBDatabindingTemplate.xsl Wed Feb 21 23:10:02 2007
@@ -3,6 +3,7 @@
     <xsl:key name="paramsIn" match="//databinders/param[@direction='in']" use="@type"/>
     <xsl:key name="paramsOut" match="//databinders/param[@direction='out']" use="@type"/>
     <xsl:key name="innerParams" match="//databinders/param[@direction='in']/param" use="@partname"/>
+    <xsl:key name="innerOutParams" match="//databinders/param[@direction='out']/param" use="@partname"/>
     <!--<xsl:key name="paramsType" match="//databinders/param[@direction='in']" use="@type"/>-->
 
     <!-- #################################################################################  -->
@@ -126,6 +127,7 @@
                                 <xsl:value-of select="$inputElementType"/> wrappedType){
                                     return wrappedType.get<xsl:value-of select="$inputElementShortType"/>();
                                 }
+
                                 private <xsl:value-of select="$inputElementType"/> wrap<xsl:value-of select="$opname"/>(
                                 <xsl:value-of select="$inputElementComplexType"/> innerType){
                                     <xsl:value-of select="$inputElementType"/> wrappedElement = new <xsl:value-of select="$inputElementType"/>();
@@ -148,18 +150,45 @@
                         <xsl:variable name="outputElementShortType" select="../../param[@type!='' and @direction='out' and @opname=$opname]/@shorttype"></xsl:variable>
                         <xsl:variable name="outputElementComplexType" select="../../param[@type!='' and @direction='out' and @opname=$opname]/@complextype"></xsl:variable>
 
+                        <xsl:for-each select="../../param[@type!='' and @direction='out' and @opname=$opname]/param">
+
+                            <xsl:variable name="paramElement" select="."></xsl:variable>
+                            <xsl:variable name="partName" select="@partname"></xsl:variable>
+
+                            <xsl:if test="(generate-id($paramElement) = generate-id(key('innerOutParams', $partName)[1])) or
+                                (generate-id($outputElement) = generate-id(key('paramsOut', $outputElementType)[1]))">
+
+                                <!-- we put the out element type to the method signature to make it unique -->
+                                private <xsl:value-of select="@type"/> get<xsl:value-of select="$outputElementShortType"/><xsl:value-of select="@partname"/>(
+                                <xsl:value-of select="$outputElementType"/> wrappedType){
+                                <xsl:choose>
+                                    <xsl:when test="string-length(normalize-space($outputElementComplexType)) > 0">
+                                        return wrappedType.get<xsl:value-of select="$outputElementShortType"/>().get<xsl:value-of select="@partname"/>();
+                                    </xsl:when>
+                                    <xsl:otherwise>
+                                        return wrappedType.get<xsl:value-of select="@partname"/>();
+                                    </xsl:otherwise>
+                                </xsl:choose>
+                                }
+                             </xsl:if>
+                        </xsl:for-each>
+
                         <xsl:if test="generate-id($outputElement) = generate-id(key('paramsOut', $outputElementType)[1])">
                             <xsl:if test="string-length(normalize-space($outputElementComplexType)) > 0">
+
                                 private <xsl:value-of select="$outputElementComplexType"/> get<xsl:value-of select="$opname"/>(
                                 <xsl:value-of select="$outputElementType"/> wrappedType){
                                     return wrappedType.get<xsl:value-of select="$outputElementShortType"/>();
                                 }
+
+                                <!-- in client side we donot have to wrap the out put messages -->
+                                <!--
                                 private <xsl:value-of select="$outputElementType"/> wrap<xsl:value-of select="$opname"/>(
                                 <xsl:value-of select="$outputElementComplexType"/> innerType){
                                     <xsl:value-of select="$outputElementType"/> wrappedElement = new <xsl:value-of select="$outputElementType"/>();
                                     wrappedElement.set<xsl:value-of select="$outputElementShortType"/>(innerType);
                                     return wrappedElement;
-                                }
+                                } -->
                             </xsl:if>
                         </xsl:if>
                   </xsl:if>
@@ -227,12 +256,14 @@
                         <xsl:value-of select="$inputElementType"/> wrappedType){
                             return wrappedType.get<xsl:value-of select="$inputElementShortType"/>();
                         }
+                        <!-- in server side we do not want to wrap input elements -->
+                        <!--
                         private <xsl:value-of select="$inputElementType"/> wrap<xsl:value-of select="$opname"/>(
                         <xsl:value-of select="$inputElementComplexType"/> innerType){
                             <xsl:value-of select="$inputElementType"/> wrappedElement = new <xsl:value-of select="$inputElementType"/>();
                             wrappedElement.set<xsl:value-of select="$inputElementShortType"/>(innerType);
                             return wrappedElement;
-                        }
+                        } -->
                     </xsl:if>
                 </xsl:if>
             </xsl:if>
@@ -244,12 +275,42 @@
             <xsl:variable name="outputElementShortType" select="../../param[@type!='' and @direction='out' and @opname=$opname]/@shorttype"></xsl:variable>
             <xsl:variable name="outputElementComplexType" select="../../param[@type!='' and @direction='out' and @opname=$opname]/@complextype"></xsl:variable>
 
+            <xsl:for-each select="../../param[@type!='' and @direction='out' and @opname=$opname]/param">
+
+                    <xsl:variable name="paramElement" select="."></xsl:variable>
+                    <xsl:variable name="partName" select="@partname"></xsl:variable>
+
+                    <xsl:if test="(generate-id($paramElement) = generate-id(key('innerOutParams', $partName)[1])) or
+                        (generate-id($outputElement) = generate-id(key('paramsOut', $outputElementType)[1]))">
+
+                        <!-- we put the out element type to the method signature to make it unique -->
+                        private <xsl:value-of select="$outputElementType"/> wrap<xsl:value-of select="$outputElementShortType"/><xsl:value-of select="@partname"/>(
+                        <xsl:value-of select="@type"/> param){
+                        <xsl:value-of select="$outputElementType"/> wrappedElement = new <xsl:value-of select="$outputElementType"/>();
+                        <xsl:choose>
+                            <xsl:when test="string-length(normalize-space($outputElementComplexType)) > 0">
+                                <xsl:value-of select="$outputElementComplexType"/> innerType = new <xsl:value-of
+                                    select="$outputElementComplexType"/>();
+                                innerType.set<xsl:value-of select="@partname"/>(param);
+                                wrappedElement.set<xsl:value-of select="$outputElementShortType"/>(innerType);
+                            </xsl:when>
+                            <xsl:otherwise>
+                                wrappedElement.set<xsl:value-of select="@partname"/>(param);
+                            </xsl:otherwise>
+                        </xsl:choose>
+                            return wrappedElement;
+                        }
+                     </xsl:if>
+                </xsl:for-each>
+
             <xsl:if test="generate-id($outputElement) = generate-id(key('paramsOut', $outputElementType)[1])">
                 <xsl:if test="string-length(normalize-space($outputElementComplexType)) > 0">
+                    <!-- in server side we do not want to unwrap the output type -->
+                    <!--
                     private <xsl:value-of select="$outputElementComplexType"/> get<xsl:value-of select="$opname"/>(
                     <xsl:value-of select="$outputElementType"/> wrappedType){
                         return wrappedType.get<xsl:value-of select="$outputElementShortType"/>();
-                    }
+                    } -->
                     private <xsl:value-of select="$outputElementType"/> wrap<xsl:value-of select="$opname"/>(
                     <xsl:value-of select="$outputElementComplexType"/> innerType){
                         <xsl:value-of select="$outputElementType"/> wrappedElement = new <xsl:value-of select="$outputElementType"/>();



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