Author: jonathan
Date: Wed Jan  9 02:01:22 2008
New Revision: 12052

Log:

more rpc changes.

Modified:
   trunk/commons/dynamic-codegen/src/wsdl11to20.xsl10.xsl

Modified: trunk/commons/dynamic-codegen/src/wsdl11to20.xsl10.xsl
==============================================================================
--- trunk/commons/dynamic-codegen/src/wsdl11to20.xsl10.xsl      (original)
+++ trunk/commons/dynamic-codegen/src/wsdl11to20.xsl10.xsl      Wed Jan  9 
02:01:22 2008
@@ -104,19 +104,27 @@
     
     <xsl:template match="w11soap:body | w12soap:body" mode="rpctypes">
         <xsl:variable name="soapbody" select="."/>
-        <xsl:if test="$soapbody/../../@style = 'rpc' or 
$soapbody/../../../w11soap:binding/@style = 'rpc' or 
$soapbody/../../../w12soap:binding/@style = 'rpc'">
-            <xsl:variable name="message_name_prefix" 
select="substring-before(../@message,':')"/>
+        <xsl:if test="$soapbody/../../w11soap:operation/@style = 'rpc' or 
+                      $soapbody/../../w12soap:operation/@style = 'rpc' or 
+                      $soapbody/../../../w11soap:binding/@style = 'rpc' or
+                      $soapbody/../../../w12soap:binding/@style = 'rpc'">
+            <xsl:variable name="portType_name" 
select="substring-after(ancestor::w11:binding/@type,':')"/>
+            <xsl:variable name="operation_name" 
select="ancestor::w11:operation/@name"/>
+            <xsl:variable name="bound_operation" 
select="/w11:definitions/w11:[EMAIL PROTECTED] = $portType_name]/w11:[EMAIL 
PROTECTED] = $operation_name]"/>
+            <xsl:variable name="message_name" 
select="$bound_operation/*[local-name() = local-name(current()/..)]/@message"/>
+            <xsl:variable name="message_name_prefix" 
select="substring-before($message_name,':')"/>
             <xsl:variable name="message_name_local-name">
                 <xsl:choose>
-                    <xsl:when test="contains(../@message,':')">
-                        <xsl:value-of 
select="substring-after(../@message,':')"/>
+                    <xsl:when test="contains($message_name,':')">
+                        <xsl:value-of 
select="substring-after($message_name,':')"/>
                     </xsl:when>
                     <xsl:otherwise>
-                        <xsl:value-of select="../@message"/>
+                        <xsl:value-of select="$message_name"/>
                     </xsl:otherwise>
                 </xsl:choose>
             </xsl:variable>        
             <xsl:variable name="message_name_namespace-uri" 
select="../namespace::*[local-name()=$message_name_prefix]"/>
+
             <xsl:variable name="message"
                 
select="/w11:definitions/w11:message[/w11:definitions/@targetNamespace =    
$message_name_namespace-uri and @name = $message_name_local-name]"/>
             <xsl:variable name="parts" select="$soapbody/@parts"/>
@@ -126,43 +134,66 @@
                     <xsl:with-param name="message" select="$message"/>
                 </xsl:call-template>
             </xsl:variable>
-            <xsl:if test="$usestypes='no'"><!--TODO check -->
-                <xsl:variable name="localName">
-                    <xsl:call-template 
name="resolve-soaprpc-element-localname">
-                        <xsl:with-param name="msg" select=".."/>
-                    </xsl:call-template>
-                </xsl:variable>
-                <xsl:if test="$localName != '#any'">
-                    <xs:schema targetNamespace="[EMAIL PROTECTED]">
-                        <xs:element name="{$localName}">
-                            <xs:complexType>
-                                <xs:sequence>
-                                    <xsl:for-each 
select="$message/w11:part[contains($parts,
-                                        concat(' ',@name,' '))]">
-                                        <xsl:variable name="element_prefix" 
select="substring-before(@element,':')"/>
-                                        <xsl:variable 
name="element_local-name">
-                                            <xsl:choose>
-                                                <xsl:when 
test="contains(@element,':')">
-                                                    <xsl:value-of 
select="substring-after(@element,':')"/>
-                                                </xsl:when>
-                                                <xsl:otherwise>
-                                                    <xsl:value-of 
select="@element"/>
-                                                </xsl:otherwise>
-                                            </xsl:choose>
-                                        </xsl:variable>        
-                                        <xsl:variable 
name="element_namespace-uri" 
select="namespace::*[local-name()=$element_prefix]"/>
-                                        <xsl:variable 
name="element_prefix-separator">
-                                            <xsl:if test="$element_prefix != 
''">:</xsl:if>
-                                        </xsl:variable>
-                                        <xs:element 
ref="{$element_prefix}{$element_prefix-separator}{$element_local-name}">
-                                            <xsl:copy-of 
select="namespace::*[local-name()=$element_prefix]"/><!-- no namespace remap -->
-                                        </xs:element>
-                                    </xsl:for-each>
-                                </xs:sequence>
-                            </xs:complexType>
-                        </xs:element>
-                    </xs:schema>
-                </xsl:if>
+
+            <xsl:variable name="localName">
+                <xsl:call-template name="resolve-soaprpc-element-localname">
+                    <xsl:with-param name="msg" select=".."/>
+                </xsl:call-template>
+            </xsl:variable>
+            <xsl:if test="$localName != '#any'">
+                <xs:schema targetNamespace="[EMAIL PROTECTED]">
+                    <xs:element name="{$localName}">
+                        <xs:complexType>
+                            <xs:sequence>
+                                <xsl:choose>
+                                    <xsl:when test="$usestypes='yes'">
+                                        <xsl:for-each 
select="$message/w11:part[not($parts) or contains($parts,concat(' ',@name,' 
'))]">
+                                            <xsl:variable name="type_prefix" 
select="substring-before(@type,':')"/>
+                                            <xsl:variable 
name="type_local-name">
+                                                <xsl:choose>
+                                                    <xsl:when 
test="contains(@type,':')">
+                                                        <xsl:value-of 
select="substring-after(@type,':')"/>
+                                                    </xsl:when>
+                                                    <xsl:otherwise>
+                                                        <xsl:value-of 
select="@type"/>
+                                                    </xsl:otherwise>
+                                                </xsl:choose>
+                                            </xsl:variable>        
+                                            <xsl:variable 
name="type_namespace-uri" select="namespace::*[local-name()=$type_prefix]"/>
+                                            <xsl:variable 
name="type_prefix-separator">
+                                                <xsl:if test="$type_prefix != 
''">:</xsl:if>
+                                            </xsl:variable>
+                                            <xs:element name="[EMAIL 
PROTECTED]" type="{$type_prefix}{$type_prefix-separator}{$type_local-name}">
+                                                <xsl:copy-of 
select="namespace::*[local-name()=$type_prefix]"/>                        
</xs:element>
+                                        </xsl:for-each>
+                                    </xsl:when>
+                                    <xsl:otherwise><!--TODO check -->
+                                        <xsl:for-each 
select="$message/w11:part[not($parts) or contains($parts,concat(' ',@name,' 
'))]">
+                                            <xsl:variable 
name="element_prefix" select="substring-before(@element,':')"/>
+                                            <xsl:variable 
name="element_local-name">
+                                                <xsl:choose>
+                                                    <xsl:when 
test="contains(@element,':')">
+                                                        <xsl:value-of 
select="substring-after(@element,':')"/>
+                                                    </xsl:when>
+                                                    <xsl:otherwise>
+                                                        <xsl:value-of 
select="@element"/>
+                                                    </xsl:otherwise>
+                                                </xsl:choose>
+                                            </xsl:variable>        
+                                            <xsl:variable 
name="element_namespace-uri" 
select="namespace::*[local-name()=$element_prefix]"/>
+                                            <xsl:variable 
name="element_prefix-separator">
+                                                <xsl:if test="$element_prefix 
!= ''">:</xsl:if>
+                                            </xsl:variable>
+                                            <xs:element 
ref="{$element_prefix}{$element_prefix-separator}{$element_local-name}">
+                                                <xsl:copy-of 
select="namespace::*[local-name()=$element_prefix]"/><!-- no namespace remap -->
+                                            </xs:element>
+                                        </xsl:for-each>
+                                    </xsl:otherwise>
+                                </xsl:choose>
+                            </xs:sequence>
+                        </xs:complexType>
+                    </xs:element>
+                </xs:schema>
             </xsl:if>
         </xsl:if>
     </xsl:template>
@@ -413,6 +444,7 @@
     <xsl:template name="resolve-elementType-attrs">
         <!-- This template is called by resolve-elementType to set attribute 
values -->
         <xsl:param name="element"/>
+        <xsl:param name="namespace"/>
         <xsl:param name="faultname"/>
         <xsl:choose>
             <xsl:when test="self::w11:fault">
@@ -424,9 +456,15 @@
                 </xsl:attribute>
             </xsl:when>
             <xsl:otherwise>
+                <xsl:variable name="prefix">
+                    <xsl:value-of 
select="local-name(namespace::*[.=$namespace])"/>
+                </xsl:variable>
                 <xsl:attribute name="element">
+                    <xsl:value-of select="$prefix"/>
+                    <xsl:text>:</xsl:text>
                     <xsl:value-of select="$element"/>
                 </xsl:attribute>
+                <xsl:copy-of select="namespace::*[.=$namespace]"/>
             </xsl:otherwise>
         </xsl:choose>
         <xsl:copy-of select="@wsaw:Action"/>
@@ -491,7 +529,11 @@
         <xsl:variable name="bound_operation" select="//w11:[EMAIL PROTECTED] = 
$portType_local-name or 
contains(concat(':',@type,':'),concat($portType_local-name,':')) ]/w11:[EMAIL 
PROTECTED]"/>
         <!-- FIXME: this has a good chance of breaking if the message is bound 
more than once -->
         <!-- FIXME: Only running tests on one operation  -->
-        <xsl:variable name="soapbody" 
select="$bound_operation/w11:input[not(@message) or @message = 
$message_name_local-name]/w11soap:body | 
$bound_operation/w11:output[not(@message) or @message = 
$message_name_local-name]/w11soap:body | 
$bound_operation/w11:input[not(@message) or @message = 
$message_name_local-name]/w12soap:body | 
$bound_operation/w11:output[not(@message) or @message = 
$message_name_local-name]/w12soap:body"/>
+        <xsl:variable name="soapbody"
+            select="$bound_operation/w11:input[not(@message) or 
@message=$message_name_local-name]/w11soap:body | 
+                    $bound_operation/w11:output[not(@message) or 
@message=$message_name_local-name]/w11soap:body | 
+                    $bound_operation/w11:input[not(@message) or 
@message=$message_name_local-name]/w12soap:body | 
+                    $bound_operation/w11:output[not(@message) or 
@message=$message_name_local-name]/w12soap:body"/>
         <xsl:choose>
             <!-- Is this SOAP RPC? -->
             <xsl:when test="$soapbody/../../w11soap:operation/@style = 'rpc' or
@@ -514,29 +556,17 @@
                             </xsl:call-template>
                         </xsl:variable>
                         <xsl:variable name="elementType_namespace-uri" 
select="$soapbody/@namespace"/>
-                        <xsl:variable name="elementType">
-                            <xsl:choose>
-                                <xsl:when test="$localName = '#any'">
-                                    <xsl:value-of select="$localName"/>
-                                </xsl:when>
-                                <xsl:otherwise>
-                                    <xsl:value-of 
select="concat('bodyns:',$localName)"/>
-                                </xsl:otherwise>
-                            </xsl:choose>
-                        </xsl:variable>
-                        <xsl:if test="$localName != '#any'">
-                            <!--TODO          <xsl:namespace name="bodyns"
-                 select="$soapbody/@namespace" />
--->
-                        </xsl:if>
+                        <xsl:variable name="elementType" select="$localName"/>
                         <xsl:call-template name="resolve-elementType-attrs">
                             <xsl:with-param name="element" 
select="$elementType"/>
+                            <xsl:with-param name="namespace" 
select="$elementType_namespace-uri"/>
                             <xsl:with-param name="faultname" select="@name"/>
                         </xsl:call-template>
                     </xsl:when>
                     <xsl:otherwise>
                         <xsl:call-template name="resolve-elementType-attrs">
-                            <xsl:with-param name="element" select="'#any'"/>
+                            <xsl:with-param name="element" 
select="$message_name_local-name"/>
+                            <xsl:with-param name="namespace" 
select="$message_name_namespace-uri"/>
                             <xsl:with-param name="faultname" select="@name"/>
                         </xsl:call-template>
                     </xsl:otherwise>
@@ -557,9 +587,9 @@
                     </xsl:choose>
                 </xsl:variable>        
                 <xsl:variable name="elementType_namespace-uri" 
select="$message/w11:part/namespace::*[local-name()=$elementType_prefix]"/>
-                <xsl:copy-of 
select="$message/w11:part/namespace::*[local-name()=$elementType_prefix]"/><!-- 
no namespace remap -->
                 <xsl:call-template name="resolve-elementType-attrs">
-                    <xsl:with-param name="element" 
select="$message/w11:part/@element"/>
+                    <xsl:with-param name="element" 
select="$elementType_local-name"/>
+                    <xsl:with-param name="namespace" 
select="$elementType_namespace-uri"/>
                     <xsl:with-param name="faultname" select="@name"/>
                 </xsl:call-template>
             </xsl:when>
@@ -599,9 +629,9 @@
                                         </xsl:choose>
                                     </xsl:variable>        
                                     <xsl:variable 
name="elementType_namespace-uri" 
select="$bodypart/namespace::*[local-name()=$elementType_prefix]"/>
-                                    <xsl:copy-of 
select="$bodypart/namespace::*[local-name()=$elementType_prefix]"/><!-- no 
namespace remap -->
                                     <xsl:call-template 
name="resolve-elementType-attrs">
                                         <xsl:with-param name="element" 
select="$bodypart/@element"/>
+                                        <xsl:with-param name="namespace" 
select="$bodypart/namespace::*[local-name()=$elementType_prefix]"/>
                                         <xsl:with-param name="faultname" 
select="@name"/>
                                     </xsl:call-template>
                                 </xsl:if>
@@ -616,11 +646,9 @@
                     </xsl:when>
                     <!-- Is the message bound to HTTP with URL replacement? -->
                     <xsl:when test="contains($httpUrlReplacement, 'y')">
-                        <!--TODO        <xsl:namespace name="convertns"
-               select="concat(/w11:definitions/@targetNamespace, 'GEN')" />
--->
                         <xsl:call-template name="resolve-elementType-attrs">
                             <xsl:with-param name="element" 
select="concat('convertns:', ../@name)"/>
+                            <xsl:with-param name="namespace" 
select="concat(/w11:definitions/@targetNamespace, 'GEN')"/>
                             <xsl:with-param name="faultname" select="@name"/>
                         </xsl:call-template>
                     </xsl:when>

_______________________________________________
Commons-dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/commons-dev

Reply via email to