W3C home > Mailing lists > Public > xml-dist-app@w3.org > October 2000

alternative format for WSDL that is SOAP compatible

From: Aleksander Slominski <aslom@cs.indiana.edu>
Date: Sun, 01 Oct 2000 10:29:23 -0500
Message-ID: <39D75853.A421891D@cs.indiana.edu>
To: "xml-dist-app@w3.org" <xml-dist-app@w3.org>
hi,

i would like to propose alternative format for WSDL that is SOAP compatible.
both representation would be equivalent and conversion should be fairly easy
(for example by using XSLT).

key benefit of using SOAP as encoding is to create standard mapping of WSDL
construction into objects (SOAP structs and arrays). it means that there is
no need to deal with DOM, namespaces or XSLT to process WSDL document
instance and SOAP can transparently use multi-ref serialization to express
equivalence of objects or even href to dynamically link remote to objects.

wsdl-soap is alternative format that is using very simple object model that allows
to serialize WSDL Service object with  SOAP encoding

     Service
         String name
         Port[] ports
     Port
         String name
         Binding binding /*defining as bindings[] would allow port to have multiple bindings!*/
         PortType portType
     Binding
         String name
         OperationBinding operationBindings[]
     OperationBinding
         String name
         MessageBinding input
         MessageBinding output
         NamedMessageBinding faults[]
     NamedMessageBinding
         String name
         MessageBinding messageBinding
     MessageBinding
         String name
     PortType
         String name
         Operation operations[]
     Operation
         Message input
         String inputName
         Message output
         String outputName
         NamedMessage faults[]
     NamedMessage
         String name
         Message message
     Message
         Part parts[]
     Part
         String name
         QName element
         QName type

i am using inheritance to express extensibility, for example it is possible
to define SOAP bindings as:

     SoapPort extends Port
         String location
     SoapBinding extends Binding
         String style
         String transport
     SoapOperationBinding extends OperationBinding
         String soapAction
     SoapMessageBinding extends MessageBinding
         String use
         String namespace
         String encodingStyle

rewriting Example 4 from WSDL specification in WSDL-SOAP alternative format
would give:

<ws:Service xmlns:ws="http://temp.uri/wsdl-soap/>
   <name>StockQuoteService</name>
    <ports SOAP-ENC:arrayType="ws:Port[1]">
       <item xsi:type='ws:SoapPort'>
            <name>StockQuotePort</name>
            <location>http://example.com/stockquote</location>
            <binding xsi:type="ws:SoapBinding">
                <name>StockQuoteSoapBinding</name>
                <style>rpc</style>
                <transport>http://schemas.xmlsoap.org/soap/http</transport>
                <operationBindings SOAP-ENC:arrayType="ws:OperationBinding[1]">
                   <item xsi:type='ws:SoapOperationBinding'>
                    <name>GetLastTradePrice</name>
                    <soapAction>http://example.com/GetLastTradePrice</soapAction>
                    <input xsi:type="ws:SoapBinding>
                        <use>encoded</use>
                        <namespace>http://example.com/stockquote</namespace>
                        <encodingStyle>http://schemas.xmlsoap.org/soap/encoding/</encodingStyle>
                   </input>
                    <output xsi:type="ws:SoapBinding>
                        <use>encoded</use>
                        <namespace>http://example.com/stockquote</namespace>
                        <encodingStyle>http://schemas.xmlsoap.org/soap/encoding/</encodingStyle>
                   </input>
                  </item>
                </operationBindings>
            </binding>
            <portType href="http://example.com/stockquote.wsdl#StockQuotePortType"/>
       </item>
    </ports>
</ws:Service>

and equivalent example in WSDL

    <service name="StockQuoteService">
        <documentation>My first service</documentation>
        <port name="StockQuotePort" binding="tns:StockQuoteBinding">
           <soap:address location="http://example.com/stockquote"/>
        </port>
    </service>

   <binding name="StockQuoteSoapBinding" type="tns:StockQuotePortType">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="GetLastTradePrice">
           <soap:operation soapAction="http://example.com/GetLastTradePrice"/>
           <input>
               <soap:body use="encoded" namespace="http://example.com/stockquote"
			encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
           </input>
           <output>
               <soap:body use="encoded" namespace="http://example.com/stockquote"
			encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
           </output>
        </operation>>
    </binding>


i welcome any comments on this approach.

best regards,

alek

p.s. one possible extension of WSDL is to allow defining multiple bindings[]
in Port object. it will allow to have multiple protocols for port - very nice
way to express services capable of fail-over (also beneficial for performance)
--
Aleksander Slominski, LH 316, IU, http://www.extreme.indiana.edu/~aslom
As I look afar I see neither cherry Nor tinted leaves Just a modest hut
on the coast In the dusk of Autumn nightfall - Fujiwara no Teika (1162-1241)
Received on Sunday, 1 October 2000 11:28:24 GMT

This archive was generated by hypermail 2.2.0+W3C-0.50 : Monday, 7 December 2009 10:58:57 GMT