initial copy from lb.ws-interface
authorAleš Křenek <ljocha@ics.muni.cz>
Wed, 11 May 2005 13:23:43 +0000 (13:23 +0000)
committerAleš Křenek <ljocha@ics.muni.cz>
Wed, 11 May 2005 13:23:43 +0000 (13:23 +0000)
org.glite.jp.ws-interface/src/puke-wsdl.xsl [new file with mode: 0644]

diff --git a/org.glite.jp.ws-interface/src/puke-wsdl.xsl b/org.glite.jp.ws-interface/src/puke-wsdl.xsl
new file mode 100644 (file)
index 0000000..9342e89
--- /dev/null
@@ -0,0 +1,167 @@
+<?xml version="1.0"?>
+
+<xsl:stylesheet version="1.0"
+       xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+       xmlns:xsd="http://www.w3.org/2001/XMLSchema"
+       xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
+       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
+
+       xmlns:lb="http://glite.org/wsdl/services/lb"
+       xmlns:lbt="http://glite.org/wsdl/types/lb">
+
+<xsl:output indent="yes"/>
+
+<xsl:template match="/service">
+       <definitions
+               xmlns="http://schemas.xmlsoap.org/wsdl/"
+               name="{@name}"
+               targetNamespace="{@ns}">
+       <documentation> <xsl:value-of select="text()"/> </documentation>
+               <types>
+                       <xsl:apply-templates select="types"/>
+               </types>
+
+               <xsl:apply-templates select="op" mode="message"/>
+
+               <xsl:apply-templates select="types/struct[@fault='yes']" mode="message"/>
+
+               <portType name="{@name}PortType">
+                       <xsl:apply-templates select="op" mode="port-type"/>
+               </portType>
+
+               <binding name="{@name}" type="{@prefix}:{@name}PortType">
+                       <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
+                       <xsl:apply-templates select="op" mode="binding"/>
+               </binding>
+
+               <service name="{@name}">
+                       <documentation><xsl:value-of select="text()"/></documentation>
+                       <port name="{@name}" binding="{@prefix}:{@name}">
+                               <soap:address location="http://test.glite.org/{@prefix}:8080"/>
+                       </port>
+
+               </service>
+
+       </definitions>
+</xsl:template>
+
+<xsl:template match="types">
+       <schema targetNamespace="{@ns}"
+               xmlns="http://www.w3.org/2001/XMLSchema"
+               elementFormDefault="unqualified"
+               attributeFormDefault="unqualified">
+
+               <xsl:apply-templates/>
+       </schema>
+</xsl:template>
+
+<xsl:template match="simple">
+       <xsd:element name="{@name}" type="xsd:{@name}"/>
+</xsl:template>
+
+<xsl:template match="enum">
+       <xsd:simpleType name="{@name}">
+               <xsd:restriction base="xsd:string">
+                       <xsl:for-each select="val"><xsd:enumeration value="{@name}"/></xsl:for-each>
+               </xsd:restriction>
+       </xsd:simpleType>
+       <xsd:element name="{@name}" type="{/service/types/@prefix}:{@name}"/>
+</xsl:template>
+
+<xsl:template match="flags">
+       <xsd:simpleType name="{@name}Value">
+               <xsd:restriction base="xsd:string">
+                       <xsl:for-each select="val"><xsd:enumeration value="{@name}"/></xsl:for-each>
+               </xsd:restriction>
+       </xsd:simpleType>
+       <xsd:complexType name="{@name}">
+               <xsd:sequence>
+                       <xsd:element name="flag" type="{/service/types/@prefix}:{@name}Value" minOccurs="0" maxOccurs="unbounded"/>
+               </xsd:sequence>
+       </xsd:complexType>
+       <xsd:element name="{@name}" type="{/service/types/@prefix}:{@name}"/>
+</xsl:template>
+
+<xsl:template match="struct">
+       <xsd:complexType name="{@name}">
+               <xsd:sequence>
+                       <xsl:for-each select="elem">
+                               <xsl:variable name="type">
+                                       <xsl:choose>
+                                               <xsl:when test="contains(@type,':')">
+                                                       <xsl:value-of select="@type"/>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:value-of select="/service/types/@prefix"/>:<xsl:value-of select="@type"/>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:variable>
+                               <xsl:variable name="min">
+                                       <xsl:choose>
+                                               <xsl:when test="@optional='yes'">0</xsl:when>
+                                               <xsl:otherwise>1</xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:variable>
+                               <xsl:variable name="max">
+                                       <xsl:choose>
+                                               <xsl:when test="@list='yes'">unbounded</xsl:when>
+                                               <xsl:otherwise>1</xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:variable>
+                               <xsd:element name="{@name}" type="{$type}" minOccurs="{$min}" maxOccurs="{$max}"/>
+                       </xsl:for-each>
+               </xsd:sequence>
+       </xsd:complexType>
+       <xsd:element name="{@name}" type="{/service/types/@prefix}:{@name}"/>
+</xsl:template>
+
+<xsl:template match="op" mode="message">
+       <wsdl:message name="{@name}Request">
+               <xsl:for-each select="input">
+                       <wsdl:part name="{@name}" element="{/service/types/@prefix}:{@type}">
+                               <wsdl:documentation><xsl:value-of select="text()"/></wsdl:documentation>
+                       </wsdl:part>
+               </xsl:for-each>
+       </wsdl:message>
+       <wsdl:message name="{@name}Response">
+               <xsl:for-each select="output">
+                       <wsdl:part name="{@name}" element="{/service/types/@prefix}:{@type}">
+                               <wsdl:documentation><xsl:value-of select="text()"/></wsdl:documentation>
+                       </wsdl:part>
+               </xsl:for-each>
+       </wsdl:message>
+</xsl:template>
+
+<xsl:template match="struct[@fault='yes']" mode="message">
+       <wsdl:message name="{@name}">
+               <wsdl:part name="{@name}" element="{/service/types/@prefix}:{@name}">
+                       <wsdl:documentation><xsl:value-of select="text()"/></wsdl:documentation>
+               </wsdl:part>
+       </wsdl:message>
+</xsl:template>
+
+<xsl:template match="op" mode="port-type">
+       <wsdl:operation name="{@name}">
+               <wsdl:documentation><xsl:value-of select="text()"/></wsdl:documentation>
+               <wsdl:input name="i" message="{/service/@prefix}:{@name}Request"/>
+               <wsdl:output name="o" message="{/service/@prefix}:{@name}Response"/>
+               <wsdl:fault name="f" message="{/service/@prefix}:{fault/@name}"/>
+       </wsdl:operation>
+</xsl:template>
+
+<xsl:template match="op" mode="binding">
+       <wsdl:operation name="{@name}">
+               <soap:operation style="rpc"/>
+               <wsdl:input name="i">
+                       <soap:body use="literal" namespace="{/service/@ns}"/>
+               </wsdl:input>
+               <wsdl:output name="o">
+                       <soap:body use="literal" namespace="{/service/@ns}"/>
+               </wsdl:output>
+               <wsdl:fault name="f">
+                       <soap:fault use="literal"/>
+               </wsdl:fault>
+       </wsdl:operation>
+</xsl:template>
+
+</xsl:stylesheet>