Corso di Laurea Magistrale in Ingegneria Gestionale Corso di Sistemi Informativi Modulo II A. A. 2013-2014 SISTEMI INFORMATIVI Modulo II Web Service: tecnologie (SOAP, WSDL, UDDI) Figure tratte dal testo di riferimento, Copyright Springer Verlag Berlin Heidelberg 2004 1
SOA e Web Service UDDI SERVICE REGISTRY SERVICE DESCRIPTION 1 PUBLISH 2 FIND SOAP SOAP WSDL WSDL SERVICE CONSUMER SOAP 3 BIND SERVICE SERVICE INTERFACE INTERFACE SERVICE DESCRIPTION SERVICE SERVICE PROVIDER Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 2
SOAP SOAP: Simple Object Access Protocol. Nato nel 1999. Ultima W3C Recommendation: versione 1.2 del 2007. La specifica di SOAP copre 4 aree: Formato di messaggi basato su XML per la comunicazione unidirezionale e stateless Descrizione di come un messaggio SOAP (che è un documento XML) deve essere trasportato attraverso HTTP (per interazioni via Web) o SMTP (per interazioni via email) Regole da seguire per elaborare un messaggio SOAP e classificazione delle entità coinvolte: quali parti devono essere lette da chi, cosa fare in caso il contenuto non venga compreso. (document-style Web Service) Convenzioni su come eseguire una chiamata RPC e inviare una risposta attraverso SOAP per implementare RPC-style WS Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 3
Messaggi SOAP Ogni messaggio SOAP è costituito da un envelope (busta) che contiene i dati Un messaggio SOAP ha 2 parti: header: è opzionale e può essere suddiviso in blocchi body: è obbligatorio e può essere suddiviso in blocchi SOAP non specifica come usare header e body; convenzionalmente, però, l'header contiene dati utili al middleware WS SOAP, il body dati utili alle applicazioni Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 4
Messaggi SOAP: esempio 1 Solo body Namespace XML per la serializzazione di messaggi SOAP Namespace XML per l'envelope SOAP <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:getlasttradeprice xmlns:m="some-uri"> <symbol>dis</symbol> </m:getlasttradeprice> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 5
Messaggi SOAP: esempio 2 Header e body <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Header> <t:transaction xmlns:t="some-uri" SOAP-ENV:mustUnderstand= true"> 5 </t:transaction> </SOAP-ENV:Header> <SOAP-ENV:Body> <m:getlasttradeprice xmlns:m="some-uri"> <symbol>dis</symbol> </m:getlasttradeprice> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 6
Header SOAP L'header è adibito a usi di livello infrastruttura, non applicativo: informazioni di coordinamento, identificative (p.e. di transazione), di sicurezza (p.e. certificati), etc. SOAP non definisce quali informazioni un header debba contenere, ma prevede l'uso di attributi con cui il mittente può specificare chi, tra i diversi nodi che un messaggio può attraversare prima di giungere al destinatario finale, può o deve elaborare ciascun blocco: role (SOAP v. 1.2; in SOAP 1.1 vi era l'analogo attributo actor): URI del ruolo (tipo di nodo) che può elaborare un blocco. Può essere application-defined o uno dei tre ruoli standard forniti da SOAP: none: propagare l'informazione senza elaborarla next: ciascun nodo che riceve questo messaggio può elaborare questo blocco ultimatereceiver: il blocco è per il destinatario finale del messaggio mustunderstand: può valere true o false, indica se è obbligatorio elaborare il blocco. relay: inoltra l'header se non elaborato (introdotto in SOAP 1.2) Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 7
Header SOAP regole di elaborazione Ogni nodo SOAP lungo il percorso del messaggio guarda il ruolo associato ad ogni blocco. Il ruolo determina chi è responsabile di ciascun blocco. Se un blocco non ha ruolo, il default è ultimatereceiver Se è presente mustunderstand, un nodo che corrisponde al ruolo deve elaborare quella parte del messaggio; se non può, deve generare un fault e non inoltrare più il messaggio Se è presente relay, un nodo che non elabora una parte del messaggio la deve inoltrare (cioè non può eliminarla) L'uso di relay insieme al ruolo next è utile per stabilire informazioni persistenti lungo il percorso del messaggio (ad es. informazioni di sessione) Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 8
Codifica L'attributo encodingstyle si può applicare a qualsiasi blocco dell'header e del body. Ha come valore un URI che indica il tipo di dato e la codifica contenuta nell'elemento (e nei suoi discendenti) Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 9
Header SOAP: esempio <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:c="http://transactions.example.org" xmlns:r="http://routings.example.org"> <env:header> <c:transactionid env:mustunderstand="true" env:role="http://transactions.example.org/tmonitor"> 18 </c:transactionid> <r:route env:relay="true" env:role="http://www.w3.org/2003/05/soap-envelope/role/next"> <r:node>130.225.16.12</r:node> <r:node>10.11.40.201</r:node> </r:route> </env:header> <env:body> <m:chargereservation xmlns:m="http://travel.example.org/" env:encodingstyle="http://www.w3.org/2003/05/soap-encoding" /> <m:reservation xmlns:m="http://travel.example.org/reservation" /> </env:body> </env:envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 10
Body SOAP Contiene i dati per il destinatario del messaggio ed è application-specific Contrariamente all'header, SOAP specifica i contenuti di alcuni elementi del body blocchi del body da usare per mappare una interazione RPC il blocco Fault, da inserire nei messaggi di risposta per segnalare un errore Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 11
Il blocco Fault In SOAP 1.2, contiene due elementi obbligatori Code: indica la categoria di errore (tra quelle definite da SOAP) ed eventuale sottocategoria (definita invece dall'applicazione). Categorie: Sender: errore del mittente (messaggio malformato, dati mancanti, etc.) Receiver: errore del destinatario (impossibile elaborare il messaggio al momento) MustUnderstand: un blocco header con mustunderstand=true non è stato compreso VersionMismatch: errore nell'envelope SOAP (tipicamente di versione) DataEncodingUnknown: codifica non supportata per un blocco dell'header o del body Reason: spiegazione dell'errore comprensibile da utenti umani (non destinata all'elaborazione da parte di agenti automatici) ed altri opzionali Detail: informazioni sull'errore specifiche in base all'applicazione Node: identificativo del nodo che ha prodotto l'errore (se assente, si intende il destinatario del messaggio) Role: ruolo svolto dal nodo che ha prodotto l'errore. Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 12
Gestione degli errori esempio Messaggio di risposta a una richiesta contenente un parametro non valido <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:w="http://www.widget.inc/shop"> <env:body> <env:fault> <env:code> <env:value>env:sender</env:value> <env:subcode> <env:value>w:invalidbuyrequest</env:value> </env:subcode> </env:code> <env:reason> <env:text xml:lang="en"> The value of 'amount' is invalid! </env:text> <env:text xml:lang= it"> Il valore di amount non e valido! </env:text> </env:reason> </env:fault> </env:body> </env:envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 13
Esempio riepilogativo 1/2 Prenotazione di un viaggio <?xmlversion='1.0'?> <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope"> <env:header> <m:reservation xmlns:m="http://travelc.example.org/reservation" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustunderstand="true"> <m:ref>uuid:093a2da1-q345-739r-ba5d-pqff98fe8j7d</m:ref> <m:dateandtime>2001-11-29t13:20:00.000-05:00</m:dateandtime> </m:reservation> <n:passenger xmlns:n="http://mycompany.example.com/employees" env:role="http://www.w3.org/2003/05/soap-envelope/role/next" env:mustunderstand="true"> <n:name>åke Jógvan Øyvind</n:name> </n:passenger> </env:header> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 14
Esempio riepilogativo <env:body> <p:itinerary xmlns:p="http://travel.example.org/reservation/travel"> <p:departure> <p:departing>new York</p:departing> <p:arriving>los Angeles</p:arriving> <p:departuredate>2001-12-14</p:departuredate> <p:departuretime>lateafternoon</p:departuretime> <p:seatpreference>aisle</p:seatpreference> </p:departure> <p:return> <p:departing>los Angeles</p:departing> <p:arriving>new York</p:arriving> <p:departuredate>2001-12-20</p:departuredate> <p:departuretime>mid-morning</p:departuretime> <p:seatpreference/> </p:return> </p:itinerary> <q:lodging xmlns:q="http://travel.example.org/reservation/hotels"> <q:preference>none</q:preference> </q:lodging> </env:body> </env:envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 15
SOAP e HTTP Un binding di SOAP a un protocollo di trasporto è una descrizione di come inviare messaggi SOAP usando quel protocollo. Il binding SOAP più comune è HTTP. SOAP può usare GET o POST. Con GET, la richiesta non è un messaggio SOAP ma lo è la risposta. Con POST, sia la richiesta sia la risposta sono messaggi SOAP. SOAP usa gli stessi status code di HTTP per facilitare l'interpretazione delle risposte HTTP. Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 16
Esempio - richiesta Richiesta della quotazione di un titolo azionario POST /StockQuote HTTP/1.1 Host: stock.example.org Content-Type: application/soap+xml; charset="utf-8" action= Some-URI Content-Length: 296 <ENV:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <ENV:Body> <m:getlasttradeprice xmlns:m="some-uri"> <m:symbol>dis</m:symbol> </m:getlasttradeprice> </ENV:Body> </ENV:Envelope> Notare il Content-type e il parametro action, che indica l'intento della richiesta attraverso un URI Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 17
Esempio - risposta HTTP/1.1 200 OK Content-Type: application/soap+xml; charset="utf-8" Content-Length: 311 <ENV:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" ENV:encodingStyle="http://www.w3.org/2003/05/soap-encoding"> <ENV:Body> <m:getlasttradepriceresponse xmlns:m="some-uri"> <m:price>34.5</m:price> </m:getlasttradepriceresponse> </ENV:Body> </ENV:Envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 18
Tipi di interazione nei Web Service Document-style (a.k.a. messagestyle) interaction Body costituiti da elementi con struttura definita in XML Schema Facilita convalida XML SOAP envelope SOAP body PurchaseOrder document -product item -quantity SOAP envelope SOAP body Acknowledgement document -order id RPC-style interaction Rigido modello richiestarisposta (come nell'esempio precedente) I messaggi contengono chiamate a metodi e parametri di I/O SOAP envelope SOAP body method name ordergoods input parameter 1 product item input parameter 2 quantity SOAP envelope SOAP body method return return value order id Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 19
Usare SOAP per RPC (transazionale) Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 20
RPC con SOAP - 1 HTTP Post SOAP envelope SOAP header transactional context service requester SOAP body name of the procedure input parameter 1 service provider SOAP engine HTTP engine input parameter 2 HTTP engine SOAP engine client implementation (other tiers) HTTP Post SOAP envelope SOAP header transactional context service implementation (other tiers) SOAP body return parameter Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 21
RPC con SOAP - 2 service requestor service provider client implementation invokes the service as a local call client stub service implementation invokes the local procedure of the service implementation server stub invoke SOAP engine to prepare SOAP message SOAP engine packages SOAP into HTTP and passes it to an HTTP client that sends it to the provider HTTP engine the router parses the message, identifies the appropriate stub, and delivers the parsed message SOAP router passes the content of the HTTP message to the router HTTP server Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 22
Interazione RPC-style - richiesta Pagamento di una prenotazione di viaggio <?xmlversion='1.0'?> <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > <env:header> <t:transaction xmlns:t="http://thirdparty.example.org/transaction" env:encodingstyle="http://example.com/encoding" env:mustunderstand="true" >5</t:transaction> </env:header> <env:body> <m:chargereservation xmlns:m="http://travelcompany.example.org/" env:encodingstyle="http://www.w3.org/2003/05/soap-encoding"> <n:reservation xmlns:n="http://travelcompany.example.org/reservation"> <n:code>ft35zbq</n:code> </n:reservation> <o:creditcard xmlns:o="http://mycompany.example.com/financial"> <c:name xmlns:c="http://mycompany.example.com/employees"> Åke Jógvan Øyvind </c:name> <o:number>123456789099999</o:number> <o:expiration>2005-02</o:expiration> </o:creditcard> </m:chargereservation> </env:body> </env:envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 23
Interazione RPC-style - risposta <?xmlversion='1.0'?> <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > <env:header> <t:transaction xmlns:t="http://thirdparty.example.org/transaction" env:encodingstyle="http://example.com/encoding" env:mustunderstand="true">5</t:transaction> </env:header> <env:body> <m:chargereservationresponse xmlns:rpc="http://www.w3.org/2003/05/soap-rpc" env:encodingstyle="http://www.w3.org/2003/05/soap-encoding" xmlns:m="http://travelcompany.example.org/"> <rpc:result>m:status</rpc:result> <m:status>confirmed</m:status> <m:code>ft35zbq</m:code> <m:viewat> http://travelcompany.example.org/reservations?code=ft35zbq </m:viewat> </m:chargereservationresponse> </env:body> </env:envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 24
Interazione Document-style - esempio Segnalazione di un evento ad una specifica coordinata <?xmlversion='1.0'?> <env:envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" > <env:body> <event>rain</event> <lon>5.1</lon> <lat>7.5</lat> </env:body> </env:envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 25
SOAP - Considerazioni SOAP è un protocollo molto semplice (ed estensibile) per scambiare informazioni/servizi da un middleware a un altro Prime specifiche e implementazioni legate ad HTTP, RPC e modello client-server Successivamente l'iniziativa WS-I (Web Service Interoperabilty) del consorzio OASIS ha raccomandato il document-style perché più flessibile SOAP sfrutta XML per interoperabilità e serializzazione dei dati Limiti di SOAP Uso di HTTP e XML comunicazione poco ottimizzata e rappresentazione dei dati non compatta prestazioni inferiori a middleware basati su strutture dati e protocolli specializzati e binari (p.e. CORBA) Troppo generico e semplice per supportare EAI in scenari reali. Ad esempio, sicurezza, affidabilità, transazioni e accounting sono non integrati nel protocollo. Occorrono ulteriori specifiche frutto di accordi stabiliti tra i partner nei mercati verticali (poco praticabile) definite tramite appositi standard (in corso di definizione da WS-I: WS-Security, WS-Coordination, WS-Transactions,...) Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 26
WSDL WSDL = Web Service Description Language Linguaggio per descrivere l'interfaccia di un Web Service Descrizione astratta Tipi di dati (basati su XML Schema) da usare nei messaggi Tipi di messaggi (SOAP) coinvolti nell'invocazione del servizio Operazioni messe a disposizione del servizio Descrizione concreta Binding dell'intefaccia ad un protocollo di trasporto (HTTP, ) Endpoint (indirizzo di rete) di ciascun binding, da contattare per invocare il servizio In WSDL, un servizio è costituito da un'interfaccia e dall'insieme dei binding che la implementano Versioni: 1.1 (2001), 2.0 (2007) Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 27
WSDL 1.1: struttura WSDL 1.1 specification abstract part types messages operations port types concrete part bindings services and ports Types: definizioni di tipi di dati (usando XML Schema e XSD) Message: definizione astratta di ciascun possibile messaggio Ogni messaggio è composto da parti, caratterizzate ognuna da un nome e un tipo Operation: descrizione astratta di un'azione fornita dal servizio Port type: insieme di operazioni Binding: protocollo e formato di dati per un particolare port type Port: endpoint di servizio dato da una coppia binding-indirizzo di rete Service: endpoint correlati Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 28
WSDL 1.1: esempio <?xml version="1.0"?> <definitions name="procurement" targetnamespace="http://example.com/procurement/definitions" xmlns:tns="http://example.com/procurement/definitions" xmlns:xs="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/" > <message name="ordermsg"> <part name="productname" type="xs:string"/> <part name="quantity" type="xs:integer"/> </message> abstract part messages <porttype name="procurementporttype"> <operation name="ordergoods"> <input message = "OrderMsg"/> </operation> </porttype> operation and port type <binding name="procurementsoapbinding" type="tns:procurementporttype"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="ordergoods"> <soap:operation soapaction="http://example.com/ordergoods"/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="procurementservice"> <port name="procurementport" binding="tns:procurementsoapbinding"> <soap:address location="http://example.com/procurement"/> </port> </service> </definitions> concrete part binding port and service Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 29
Abstract part message: nome del messaggio (univoco nel doc. WSDL) part: name: nome della parte (univoco all'interno del messaggio) element: elemento XSD (opzionale) type: tipo di dato (XSD simpletype o complextype) porttype: insieme di operazioni, ciascuna dotata di nome univoco e messaggi coinvolti Un porttype può supportare 4 tipologie di interazione One-way: l'endpoint riceve un messaggio Request-response: l'endpoint riceve un messaggio e ne invia uno correlato Solicit-response: l'endpoint invia un messaggio e ne riceve uno correlato Notification: l'endpoint invia un messaggio Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 30
PortType: tipi di interazione One-way <wsdl:definitions... > <wsdl:porttype... > * <wsdl:operation name="nmtoken"> <wsdl:input name="nmtoken"? message="qname"/> </wsdl:operation> </wsdl:porttype> </wsdl:definitions> Request-response <wsdl:operation name="nmtoken" parameterorder="nmtokens"> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> Solicit-response <wsdl:operation name="nmtoken" parameterorder="nmtokens"> <wsdl:output name="nmtoken"? message="qname"/> <wsdl:input name="nmtoken"? message="qname"/> <wsdl:fault name="nmtoken" message="qname"/>* </wsdl:operation> Notification <wsdl:operation name="nmtoken"> <wsdl:output name="nmtoken"? message="qname"/> </wsdl:operation> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 31
Binding Un binding definisce i formati dei messaggi e i dettagli del protocollo per le operazioni e i messaggi di un particolare porttype. Un porttype può avere un qualsiasi numero di binding L'attributo name dev'essere univoco nel documento WSDL L'attributo type indica il porttype a cui il binding si riferisce Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 32
Port Un elemento port definisce un singolo endpoint di servizio specificando un unico indirizzo per un binding <wsdl:port name="nmtoken" binding="qname"> <--extensibilityelement(1) --> </wsdl:port> Il valore di name dev'essere univoco all'interno del documento WSDL Il valore di binding indica il binding a cui la porta si riferisce Gli extensibility element permettono di specificare l'indirizzo di rete (tipicamente un URL a cui mandare messaggi SOAP su HTTP) L'indirizzo dev'essere unico per ciascuna porta Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 33
Service Service raggruppa un insieme di porte correlate Il valore di name dev'essere univoco all'interno del documento WSDL Un servizio può avere una o più port Se due o più porte sono dello stesso porttype, si intendono come alternative: il comportamento del servizio sarà lo stesso, ma sono disponibili diversi binding su protocolli diversi Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 34
Compatibilità consumer-producer Un consumatore di servizio, esaminando gli elementi port del service nel documento WSDL, vede quali sono i porttype e si rende conto di quali può usare. Ciò è importante soprattutto quando un servizio consta di più operazioni collegate tra loro: il fruitore deve supportare almeno una port per ogni porttype delle operation che vuole usare, altrimenti non potrà usare compiutamente il servizio. Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 35
Binding SOAP WSDL include un binding per endpoint SOAP, che supporta la specifica delle seguenti informazioni Indicazione che il binding si basa su protocollo SOAP Modo di specificare l'indirizzo dell'endpoint SOAP (elemento soap:address) URI per il parametro action dell'header HTTP Content-type, che specifica l'intento dell'operazione Elenco di definizioni di header da trasmettere Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 36
Definizione WSDL di servizio con binding SOAP - 1 <?xmlversion="1.0"?> <definitions name="stockquote" targetnamespace="http://example.com/stockquote.wsdl" xmlns:tns="http://example.com/stockquote.wsdl" xmlns:xsd="http://www.w3.org/2000/10/xmlschema" xmlns:xsd1="http://example.com/stockquote.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/"> <message name="gettradepriceinput"> <part name="tickersymbol" element="xsd:string"/> <part name="time" element="xsd:timeinstant"/> </message> <message name="gettradepriceoutput"> <part name="result" type="xsd:float"/> </message> <porttype name="stockquoteporttype"> <operation name="gettradeprice"> <input message="tns:gettradepriceinput"/> <output message="tns:gettradepriceoutput"/> </operation> </porttype> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 37
Definizione WSDL di servizio con binding SOAP - 2 <binding name="stockquotesoapbinding" type="tns:stockquoteporttype"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="gettradeprice"> <soap:operation soapaction="http://example.com/gettradeprice"/> <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> <service name="stockquoteservice"> <documentation>my first service</documentation> <port name="stockquoteport" binding="tns:stockquotebinding"> <soap:address location="http://example.com/stockquote"/> </port> </service> </definitions> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 38
WSDL Snowboard Example - types section <?xml <?xml version="1.0"?> <!-- <!-- root root element element wsdl:definitions defines defines set set of of related related services --> --> <wsdl:definitions name="endorsementsearch" targetnamespace="http://namespaces.snowboard-info.com" xmlns:es="http://www.snowboard-info.com/endorsementsearch.wsdl" xmlns:esxsd="http://schemas.snowboard-info.com/endorsementsearch.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <!-- <!-- wsdl:types encapsulates schema schema definitions of of communication types; types; here here using using xsd xsd --> --> <wsdl:types> <!-- <!-- all all type type declarations are are in in a chunk chunk of of xsd xsd --> --> <xsd:schema targetnamespace="http://namespaces.snowboard-info.com" xmlns:xsd="http://www.w3.org/1999/xmlschema"> <!-- <!-- xsd xsd definition: GetEndorsingBoarder [manufacturer string, string, model model string] string] --> --> <xsd:element name="getendorsingboarder"> <xsd:complextype> <xsd:sequence> <xsd:element name="manufacturer" type="string"/> <xsd:element name="model" type="string"/> </xsd:sequence> </xsd:complextype> </xsd:element> <!-- <!-- xsd xsd definition: GetEndorsingBoarderResponse [... [... endorsingboarder string string...]...] --> --> <xsd:element name="getendorsingboarderresponse"> <xsd:complextype> <xsd:all> <xsd:element name="endorsingboarder" type="string"/> </xsd:all> </xsd:complextype> </xsd:element> <!-- <!-- xsd xsd definition: GetEndorsingBoarderFault [... [... errormessage string string...]...] --> --> <xsd:element name="getendorsingboarderfault"> <xsd:complextype> <xsd:all> <xsd:element name="errormessage" type="string"/> </xsd:all> </xsd:complextype> </xsd:element> </xsd:schema> </wsdl:types> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 39
WSDL Snowboard Example - message, porttype sections <!-- wsdl:message elements describe potential transactions --> <!-- request GetEndorsingBoarderRequest is of type GetEndorsingBoarder --> <wsdl:message name="getendorsingboarderrequest"> <wsdl:part name="body" element="esxsd:getendorsingboarder"/> </wsdl:message> <!-- response GetEndorsingBoarderResponse is of type GetEndorsingBoarderResponse --> <wsdl:message name="getendorsingboarderresponse"> <wsdl:part name="body" element="esxsd:getendorsingboarderresponse"/> </wsdl:message> <!-- wsdl:porttype describes messages in an operation --> <wsdl:porttype name="getendorsingboarderporttype"> <!-- the value of wsdl:operation eludes me --> <wsdl:operation name="getendorsingboarder"> <wsdl:input message="es:getendorsingboarderrequest"/> <wsdl:output message="es:getendorsingboarderresponse"/> <wsdl:fault message="es:getendorsingboarderfault"/> </wsdl:operation> </wsdl:porttype> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 40
WSDL Snowboard Example - binding, service sections <!-- <!-- wsdl:binding states states a serialization protocol for for this this service service --> --> <wsdl:binding name="endorsementsearchsoapbinding" type="es:getendorsingboarderporttype"> <!-- <!-- leverage off off soap:binding document style style @@@(no @@@(no wsdl:foo pointing at at the the soap soap binding) --> --> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <!-- <!-- semi-opaque container of of network network transport details details classed classed by by soap:binding above above @@@ @@@ --> --> <wsdl:operation name="getendorsingboarder"> <!-- <!-- again again bind bind to to SOAP? SOAP? @@@ @@@ --> --> <soap:operation soapaction="http://www.snowboard-info.com/endorsementsearch"/> <!-- <!-- furthur furthur specify specify that that the the messages messages in in the the wsdl:operation "GetEndorsingBoarder" use use SOAP? SOAP? @@@ @@@ --> --> <wsdl:input> <soap:body use="literal" namespace="http://schemas.snowboard-info.com/endorsementsearch.xsd"/> </wsdl:input> <wsdl:output> <soap:body use="literal" namespace="http://schemas.snowboard-info.com/endorsementsearch.xsd"/> </wsdl:output> <wsdl:fault> <soap:body use="literal" namespace="http://schemas.snowboard-info.com/endorsementsearch.xsd"/> </wsdl:fault> </wsdl:operation> </wsdl:binding> <!-- <!-- wsdl:service names names a new new service service "EndorsementSearchService" --> --> <wsdl:service name="endorsementsearchservice"> <wsdl:documentation>snowboarding-info.com Endorsement Service</wsdl:documentation> <!-- <!-- connect connect it it to to the the binding binding "EndorsementSearchSoapBinding" above above --> --> <wsdl:port name="getendorsingboarderport" binding="es:endorsementsearchsoapbinding"> <!-- <!-- give give the the binding binding an an network network address address --> --> <soap:address location="http://www.snowboard-info.com/endorsementsearch"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 41
WSDL Snowboard Example - SOAP Request/Response SOAP request <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:getendorsingboarder xmlns:m="http://namespaces.snowboard-info.com"> <manufacturer>k2</manufacturer> <model>fatbob</model> </m:getendorsingboarder> </SOAP-ENV:Body> </SOAP-ENV:Envelope> SOAP response <SOAP-ENV:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <m:getendorsingboarderresponse xmlns:m="http://namespaces.snowboard-info.com"> <endorsingboarder>chris Englesmann</endorsingBoarder> </m:getendorsingboarderresponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 42
WSDL 2.0 vs WSDL 1.1 WSDL 1.1 WSDL 2.0 Elemento radice: definitions Elemento radice: description Port Endpoint PortType Interface Supporto per ereditarietà delle interfacce Messaggi composti da parti Messaggi definiti attraverso tipi XML Schema 4 primitive di trasmissione 9 pattern di scambio di messaggi Supporto per overloading delle operazioni Novità: feature e property Overloading delle operazioni eliminato Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 43
Struttura di documento WSDL 2.0 <description xmlns="http://www.w3.org/2004/08/wsdl" targetnamespace="..."...> <types> <!-- Descrizione XML Schema dei tipi di dato usati nei messaggi --> </types> <interface name="..."> <!-- Elenco di operazioni con relativi input e output --> </interface> <binding name="..." interface="..." type="..."> <!-- Codifiche dei messaggi e protocolli di comunicazione --> </binding> <service name="..." interface="..."> <!-- Combinazione di un'interfaccia, un binding e un indirizzo di servizio --> </service> </description> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 44
Pattern di scambio di messaggi In-only: un singolo messaggio in arrivo, nessun fault Out-only: un singolo messaggio in uscita, nessun fault Robust in-only: un singolo messaggio in arrivo, può provocare un messaggio di fault Robust out-only: un singolo messaggio in uscita, può provocare un messaggio di fault In-out: messaggio A in arrivo, messaggio B in uscita; se c'è un fault, è mandato al posto di B Out-in: messaggio A in uscita, messaggio B in arrivo; se c'è un fault, è mandato al posto di B Asynchronous out-in: come out-in ma con trigger per messaggi In-multi-out: Come in-out, ma zero o più messaggi in uscita (se c'è un fault, sostituisce un messaggio) Out-multi-in: inverso di in-multi-out Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 45
Uso dei pattern L'interazione RPC-style può essere usata solo con in-out, in-only, Robust in-only <operation name="getrecipesoperation" pattern="http://www.w3.org/2004/03/wsdl/in-out"> <input messagelabel="in" element="t:getrecipes"/> <output messagelabel="out" element="t:collection"/> </operation> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 46
UDDI UDDI = Universal Description, Discovery and Integration Versioni: 1.0 del 2000, 3.0 del 2004 (consorzio OASIS) Standard per directory service per permettere il binding dinamico (discovery e uso) di Web Service in modo automatico da parte di agenti software Permette di trovare il/i servizio/i richiesto/i tra quelli disponibili Fornisce al fruitore informazioni per invocare il servizio (indirizzo dell'endpoint, protocollo, struttura e codifica dei dati) Facilita la gestione di errori nell'invocazione del servizio Le operazioni per registration e discovery dei servizi sono esse stesse basate su messaggi SOAP Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 47
Uso di Web Service con UDDI Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 48
Usare UDDI Principali operazioni di un directory service (a.k.a. binder): Registrazione: un fornitore (server) di WS registra nomi dei servizi e porte corrispondenti Ritiro: un fornitore ritira un WS (annulla la registrazione) Ricerca (lookup): un fruitore (client) cerca informazioni sui WS disponibili Come trovare in primo luogo il directory service? Locazione predefinita Variabili d'ambiente Invio di messaggi broadcast per cercare il directory service nella rete Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 49
Modello dei dati UDDI - 1 Possiamo classificare le informazioni contenute in un registro UDDI rispetto allo scopo per cui sono usate: pagine bianche: elenco contenente il nome dell organizzazione, i contatti (ad es. telefono o indirizzo email) e il/i servizi offerto/i. La ricerca del WS è fatta in base alla società che lo fornisce businessentity: descrive una organizzazione che fornisce servizi publisherassertion: descrive relazioni tra le organizzazioni businessservice: elenco dei servizi forniti da un'organizzazione bindingtemplate: informazioni per invocare un servizio, inclusi indirizzo di rete e riferimento a un tmodel pagine gialle: la classificazione è fatta rispetto ad una tassonomia (standardizzata ad esempio UNSPSC (Universal Standard Products and Services Classification) or ISO 3166 Country Codes - o definita dall utente). Si ricerca il servizio in base alla categoria a cui appartiene pagine verdi: informazioni su come un servizio può essere invocato tmodel (tecnhnical model): dettagli tecnici, tra cui puntatore al documento WSDL (che non risiede nel registro UDDI) e parametri di QoS Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 50
Modello dei dati UDDI -2 Ciascun tipo di informazione è contenuto in un tipo di documento XML, di cui le specifiche UDDI definiscono lo schema. businessentity name contacts description identifiers categories businessservice service key name description categories bindingtemplate binding key description address detailed info references to tmodels tmodel keytmodel key name key name description name description overviewdoc description overviewdoc identifiers overviewdoc identifiers categories identifiers categories categories tmodel tmodel key key name name description description overviewdoc overviewdoc identifiers identifiers categories categories Specs stored at the provider s site Stored in the UDDI registry Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 51
Esempio di business entity 1/2 <businessentity xmlns="urn:uddi-org:api_v3" businesskey="uddi:7398388-7f63-73k3-h314-763272da7g41"> <name>widget Inc.</name> <contacts> <contact usetype="chief Executive Officer"> <description>ceo of Widget Inc.</description> <personname>john Doe</personName> <phone usetype="ceo">(202) 555-1414</phone> <email usetype="ceo">john.doe@widget.inc</email> </contact> </contacts> <businessservices> <businessservice servicekey="uddi:9x65542-8je7-8732-u893-8272634h7362" businesskey="uddi:7398388-7f63-73k3-h314-763272da7g41"> <name>doe Personal Recipe Server</name> <description> John Doe's personal recipe service </description> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 52
Esempio di business entity 2/2 <bindingtemplates> <bindingtemplate bindingkey="uddi:8h62363-k725-3345-73v5-823763fs7265" servicekey="uddi:9x65542-8je7-8732-u893-8272634h7362"> <accesspoint URLType="http"> http://www.widget.inc/personal/jdoe/recipeserver </accesspoint> <tmodelinstancedetails> <tmodelinstanceinfo tmodelkey="uddi:5241hy7-6252-kn72-7291-3126hj8237a2"/> </tmodelinstancedetails> </bindingtemplate> </bindingtemplates> </businessservice> </businessservices> </businessentity> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 53
Esempio di tmodel <tmodel xmlns="urn:uddi-org:api_v3" tmodelkey="uddi:5241hy7-6252-kn72-7291-3126hj8237a2"> <name>doe Personal Recipe Server</name> <description>john Doe's personal recipe service</description> <overviewdoc> <overviewurl> http://www.widget.inc/personal/jdoe/recipes.wsdl </overviewurl> </overviewdoc> <categorybag> <keyedreference keyname="uddi-org:types" keyvalue="wsdlspec" tmodelkey="uddi:c1acf26d-9672-4404-9d70-39b756e62ab4"/> <keyedreference keyname="iaawg" keyvalue="wdg18762" tmodelkey="uddi:82761uhs-442p-1712-kl82-8272hsh76519"/> </categorybag> </tmodel> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 54
API dei registri UDDI - 1 I registri UDDI espongono diverse API (mediante Web Service): UDDI inquiry API UDDI publishers API UDDI security API UDDI custody and ownership transfer API UDDI subscription API UDDI replication API Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 55
API dei registri UDDI - 2 Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 56
Esempio di discovery richiesta Ricerca dei Web Service appartenenti ad una determinata categoria (contraddistinta per identificativo) <find_service businesskey="uuid_key" generic="2.0" [maxrows="nn"] xmlns="urn:uddi-org:api_v2"> [<findqualifiers/>] [<name/> [<name/>]...] [<categorybag/>] [<tmodelbag/>] </find_service> Body di un messaggio SOAP di richiesta <find_service xmlns="urn:uddi-org:api_v3"> <categorybag> <keyedreference keyname="iaawg" keyvalue="%" tmodelkey="uddi:82761uhs-442p-1712-kl82-8272hsh76519"/> </categorybag> </find_service> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 57
Esempio di discovery risposta Per ogni servizio trovato riceviamo: ID del fornitore ID del servizio nome del servizio Body del messaggio SOAP di risposta <servicelist xmlns="urn:uddi-org:api_v3"> <serviceinfos> <serviceinfo businesskey="uddi:7398388-7f63-73k3-h314-763272da7g41" servicekey="uddi:9x65542-8je7-8732-u893-8272634h7362"> <name>doe Personal Recipe Server</name> </serviceinfo> <serviceinfo businesskey="uddi:82736h57-ha32-p581-0021-8373h6s73443" servicekey="uddi:7252ox72-k23j-4x44-7w23-k82737292527"> <name>average Recipes on The Web</name> </serviceinfo> </serviceinfos> </servicelist> Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 58
Riferimenti Testo di riferimento Alonso, Casati, Kuno, Machiraju, Web Services Concepts, Applications, Challenges, Springer, 2004, cap. 6 SOAP Specifiche W3C: http://www.w3.org/tr/soap/ WSDL Introduzione del W3C: http://www.w3.org/tr/wsdl20-primer/ UDDI Specifiche OASIS: http://www.oasis-open.org/committees/uddi-spec/doc/spec/v3/uddi-v3.0.2-20041019.htm OASIS Web Service Interoperability (WS-I) group http://www.oasis-ws-i.org/ Web Service: tecnologie - Floriano Scioscia, Giuseppe Loseto 59