Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
Obiettivi
• B2B e B2C
• Integrare multi-piattaforma
• firewall-friendly
• superare i limiti delle tecnologie precedenti (ad es. CORBA)
• integrare servizi trasversali (ad es. autenticazione,
crittografia, single sign-on, ...)
• supportare standard verticali (ebXML,
amministrazione pubblica, ...)
• Distribuito
• Grana grossa
• Auto-descrittivo
• Lascamente accoppiato
• Sincrono o asincrono
• RPC o document based
• Non confondere con la codifica SOAP
• Basato su standard
• Non indissolubilmente legato ad un protocollo di trasporto
JEE6 - WebServices - v1.4 5
SOA - Service Oriented Architecture
• Stile architetturale
• Basato su servizi esposti in rete
• Federazioni di servizi
• Riuso di servizi ed infrastrutture
• Sender
• Spedisce il messaggio / inizia la conversazione
• Intermediate
• Opzionali
• Processano solo l’Header
• Receiver
• Riceve il messaggio
• Ultimate Sender e Ultimate Receiver
• Sincrono o asincrono
JEE6 - WebServices - v1.4 9
IDL: interface definition language
• Che protocollo?
• Che formato applicativo per richiesta e risposta?
• Quale supporto per la sicurezza?
• Qual è l’URL del servizio?
• http://www.ws-i.org/
• Iniziativa del consorzio OASIS
• Garantisce un livello di interoperabilità minima
• Basic Profile (WSI-BP)
• 1.2: MTOM e WS-Addressing
• 2.0: SOAP 1.2 e WS-Addressing
• Metro, Axis, XFire, CXF, WebLogic, ASP .NET 2.0,
WebSphere, Axis (1.0), Axis 2, gSOAP
• Message
• Envelope
• Header
• Header Entries
• Body
• Gli attachment possono stare fuori dal body (es. MTOM)
• Semplice <soap:envelope>
• Il nome dell’operazione
è esplicito
<soap:body>
<myMethod>
<x xsi:type="xsd:int">5</x>
• Svantaggi <y xsi:type="xsd:float">5.0</y>
•
</myMethod>
Verboso per ogni </soap:body>
parametro </soap:envelope>
• Semplice <soap:envelope>
• Svantaggi </soap:envelope>
• Ivalidabili
messaggi non sono
in toto
• Vantaggi
• Può essere validato in toto public void myMethod(int x, float y);
• Svantaggi
• WSDL più complesso
(deve definire schema)
<soap:envelope>
<soap:body>
<xElement>5</xElement>
• C’è il nome
dell’operazione
<soap:envelope>
<soap:body>
• Inunrealtà
<myMethod>
è il nome di <x>5</x>
messaggio, ma <y>5.0</y>
</myMethod>
viene fatto coincidere </soap:body>
• Compatibile WS-I </soap:envelope>
• Svantaggi
• WSDL ancora più complesso
• Non supporta overload
delle operazioni
JEE6 - WebServices - v1.4 23
SOAP Fault
<env:Envelope xmlns:env="http://www.w3.org/2001/06/soap-envelope">
<env:Header>
<n:alertcontrol xmlns:n="http://example.org/alertcontrol">
<n:priority>1</n:priority>
<n:expires>2001-06-22T14:00:00-05:00</n:expires>
</n:alertcontrol>
</env:Header>
<env:Body>
<m:alert xmlns:m="http://example.org/alert">
<m:msg>Pick up Mary at school at 2pm</m:msg>
</m:alert>
</env:Body>
</env:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: ...
<env:Envelope xmlns:env='http://www.w3.org/2001/06/soap-envelope'
xmlns:f='http://www.w3.org/2001/06/soap-faults' >
<env:Header>
<f:Misunderstood qname='abc:Extension1'
xmlns:abc='http://example.org/2001/06/ext' />
<f:Misunderstood qname='def:Extension2'
xmlns:def='http://example.com/stuff' />
</env:Header>
<env:Body>
<env:Fault>
<faultcode>MustUnderstand</faultcode>
<faultstring>One or more mandatory headers not understood</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>
• L’informazione
Content-Type:
va spostata nel parametro Action del
• “WSDL first”
• disegnare WSDL e generare il codice Java server
• il client (Java o altro) viene generato dal WSDL
• approccio migliore e più inter-operabile
• “Java first”
• disegnare l'interfaccia Java e annotarla con @WebService
• il client Java è l'interfaccia stessa
• l'application server espone automaticamente il WSDL
• ok per Java-to-Java, può essere problematico altrimenti
JEE6 - WebServices - v1.4 33
Accedere ad un WS SOAP
------=_Part_1_4558657.1118953559446
Content-Type: application/xop+xml; type="text/xml"; charset=utf-8
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<Detail xmlns="http://example.org/mtom/data">
<image>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/
include" href="cid:5aeaa450-17f0-4484-b845-a8480c363444@example.org" />
</image>
</Detail>
</S:Body>
</S:Envelope>
------=_Part_1_4558657.1118953559446
Content-Type: image/jpeg
Content-ID: <5aeaa450-17f0-4484-b845-a8480c363444@example.org>
... binary data ...
JEE6 - WebServices - v1.4 43
Attivare MTOM
• Sul server
• @MTOM (implementazione endpoint
• deployment descriptor
• Sul client stand-alone
• Tipicamente non necessario (si attiva via WSDL)
• Eventualmente esplicito via client feature
• Soglia configurabile
• @MTOM(threshold=2000)
JEE6 - WebServices - v1.4 44
Esercizio 3
• Domande e risposte