1. WSDL och SOAP
En av de mest populära nätverksprotokollen för webbtjänster är SOAP. Nedan beskrivs den generella syntaxen för hur man kan binda SOAP till en webbtjänst i WSDL-filen.
<definitions .... >
<binding .... >
<soap:binding style="rpc|document" transport="uri">
<operation .... >
<soap:operation soapAction="uri"? style="rpc|document"?>?
<input>
<soap:body parts="nmtokens"? use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>
<soap:header message="qname" part="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>*
<soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?/>*
<soap:header>
</input>
<output>
<soap:body parts="nmtokens"? use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>
<soap:header message="qname" part="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>*
<soap:headerfault message="qname" part="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?/>*
<soap:header>
</output>
<fault>*
<soap:fault name="nmtoken" use="literal|encoded"
encodingStyle="uri-list"? namespace="uri"?>
</fault>
</operation>
</binding>
<port .... >
<soap:address location="uri"/>
</port>
</definitions>
|
2. The Calculator example
I exemplet Calculator.wsdl binds portType-elementet mot SOAP över HTTP. I vårt exempel ser koden ut såhär:
<binding name="CalculatorSoapBinding" type="tns:CalculatorPortType">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="multiplication">
<soap:operation soapAction="http://www.your_domain.com/axis/services/Calculator/Multiplication"/>
<input>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://www.your_domain.com/ns/Calculator.xsd" />
</input>
<output>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://www.your_domain.com/ns/Calculator.xsd" />
</output>
</operation>
<operation name="division">
<soap:operation soapAction="http://www.your_domain.com/axis/services/Calculator/Division"/>
<input>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://www.your_domain.com/ns/Calculator.xsd" />
</input>
<output>
<soap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://www.your_domain.com/ns/Calculator.xsd" />
</output>
<fault>
<soap:fault use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
namespace="http://www.your_domain.com/ns/Calculator.xsd" />
</fault>
</operation>
</binding>
|
3. binding
Själva binding-elementet har följande attribut:
Attribut för binding | | Beskrivning |
name | | Elementets namn, ska vara unikt bland binding-elementen i WSDL-filen. |
type | | Detta attribut mappar elementet till en portType. |
4. soap:binding
binding-elementet innehåller ett transportspecifikt element som för SOAP heter soap:binding och som har följande attribut:
Attribut för soap:binding | | defaultvärde | | Beskrivning |
transport | | - | | Detta attribut bestämmer vilket transportprotokoll som ska användas. För http://schemas.xmlsoap.org/soap/http kommer HTTP att användas, men om URI hade slutat på t.ex. smpt hade SMTP använts. |
style | | document | | Detta attribut kan anta rpc eller document. rpc innebär att dokumentet är rpc-orienterat där ett meddelande innehåller parametrar och returvärden. document innebär att meddelandena innehåller dokument. |
5. soap:operation
operation-elementet innehåller ett transportspecifikt element som för SOAP heter soap:operation och som har följande attribut:
Attribut för soap:operation | | defaultvärde | | Beskrivning |
soapAction | | - | | Detta attribut bestämmer värdet för HTTP-headerparametern SOAPAction för denna operation. Detta attribut måste anges, men det är inte så viktigt vad man knuffar in eftersom det bara rör sig om var man kan hitta en beskrivning av operationen. Om man skickar tomma strängen som soapAction betyder detta att man kan hitta meddelandets syfte på samma URI som själva meddelandet. |
style | | samma som soap:binding | | Detta behöver inte anges om du vill behålla värdet du angav i soap:binding. |
6. soap:body
input och output-elementen innehåller ett transportspecifikt element som för SOAP heter soap:body. Detta element har till syfte att bestämma hur meddelandet ska se ut inuti SOAP Body-elementet. Det viktigaste attributet för soap:body är use som bestämmer hur de element som skickas ska tolkas. use kan bara anta två väden:
- use="literal": I detta fall skickas meddelandet precis som det är definierat och man hoppas på att den som tar emot meddelandet ska förstå och kunna tolka taggarna så som de ser ut. literal är vanligast om man kör dokumentorienterade meddelanden.
- use="encoded": I detta fall refererar alla part-element i meddelandet till abstrakta datatyper m.h.a. type-attributet. Dessa datatyper kodas efter den kodningsmetod som anges med attributet encodingStyle ( attributet encodingStyle måste sättas i detta fall). encoded är vanligast om man har rpc-orienterade meddelanden.
Attribut för soap:body | | Beskrivning |
use | | Detta attribut bestämmer om parametrarna ska kodas eller skickas som de är. Om vi har use=encoded ska vi också sätta attributen encodingStyle. |
encodingStyle | | Måste sättas om du kör use=encoded. Vanligaste kodningen är http://schemas.xmlsoap.org/soap/encoding/ . |
namespace | | Namnutrymme. |