Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Integracja aplikacji Wykład 2
Piotr Czapiewski Wydział Informatyki ZUT Integracja aplikacji Wykład 2
2
Web services
3
Web services – usługi sieciowe
Definicja według W3C: A Web service is a software system designed to support interoperable machine-to-machine interaction over a network. It has an interface described in a machine-processable format (specifically WSDL). Other systems interact with the Web service in a manner prescribed by its description using SOAP-messages, typically conveyed using HTTP with an XML serialization in conjunction with other Web-related standards.
4
Rodzaje usług sieciowych
Web Services Big Web Services RESTful Web Services XML, SOAP, WSDL
5
Architektura usług sieciowych
Strony kontraktu Dostawca usług (Service Provider) Klient usługi (Service Requester) Broker, pośrednik (Service Broker) Stosowane protokoły WSDL SOAP UDDI
6
Architektura usług sieciowych
Jeden dostawca, wielu klientów
7
Protokół SOAP Klient Web service
Dawna nazwa: Simple Object Access Protocol Protokół wymiany informacji pomiędzy aplikacjami Oparty na XML Niezależny od platformy i języka programowania Transmisja zwykle za pośrednictwem protokołu HTTP (łatwe przejście przez firewalle i proxy) Klient Web service SOAP
8
Protokół SOAP SOAP Envelope SOAP Header SOAP Body
Komunikat SOAP = dokument XML Części składowe komunikatu SOAP Envelope – identyfikacja dokumentu jako komunikatu SOAP Header – informacje nagłówkowe Body – właściwa treść żądania/odpowiedzi Fault – informacje o błędach i statusie SOAP Envelope SOAP Header SOAP Body
9
Szkielet komunikatu SOAP
<?xml version="1.0"?> <soap:Envelope xmlns:soap=" soap:encodingStyle=" <soap:Header> </soap:Header> <soap:Body> <soap:Fault> </soap:Fault> </soap:Body> </soap:Envelope>
10
Komunikat SOAP Przykłady komunikatów SOAP – żądanie
<?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi=" xmlns:xsd=" xmlns:soap=" <soap:Body> <CelsiusToFahrenheit xmlns=" <Celsius>37</Celsius> </CelsiusToFahrenheit> </soap:Body> </soap:Envelope>
11
Komunikat SOAP w żądaniu HTTP
POST /webservices/tempconvert.asmx HTTP/1.1 Host: Content-Type: text/xml; charset=utf-8 Content-Length: 234 SOAPAction: " <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi=" xmlns:xsd=" xmlns:soap=" <soap:Body> <CelsiusToFahrenheit xmlns=" <Celsius>37</Celsius> </CelsiusToFahrenheit> </soap:Body> </soap:Envelope>
12
SOAP w praktyce Klient Web service Biblioteki SOAP Biblioteki SOAP
SOAP: żądanie Biblioteki SOAP SOAP: odpowiedź
13
Standard WSDL Web Service Description Language Język oparty na XML
Model opisu usług sieciowych Definicja: usług dostępnych pod danym adresem operacji udostępnianych przez usługi parametrów wejściowych i wyjściowych operacji
14
Dokument WSDL <message name="ktoraGodzina"></message>
<message name="ktoraGodzinaResponse"> <part name="return" type="xsd:string"></part> </message> <message name="zakukaj"> <part name="arg0" type="xsd:int"></part> <message name="zakukajResponse"> <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns:soap=" xmlns:tns=" xmlns:xsd=" xmlns=" targetNamespace=" name="ZegarynkaService"> <types></types> <message name="ktoraGodzina"></message> <message name="ktoraGodzinaResponse"> <part name="return" type="xsd:string"></part> </message> <message name="zakukaj"> <part name="arg0" type="xsd:int"></part> <message name="zakukajResponse"> <portType name="IZegarynka"> <operation name="ktoraGodzina" parameterOrder=""> <input message="tns:ktoraGodzina"></input> <output message="tns:ktoraGodzinaResponse"></output> </operation> <operation name="zakukaj" parameterOrder="arg0"> <input message="tns:zakukaj"></input> <output message="tns:zakukajResponse"></output> </portType> <binding name="ZegarynkaPortBinding" type="tns:IZegarynka"> ... </binding> <service name="ZegarynkaService"> <port name="ZegarynkaPort" binding="tns:ZegarynkaPortBinding"> <soap:address location=" </port> </service> </definitions> <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns:soap=" xmlns:tns=" xmlns:xsd=" xmlns=" targetNamespace=" name="ZegarynkaService"> <types></types> <message name="ktoraGodzina"></message> <message name="ktoraGodzinaResponse"> <part name="return" type="xsd:string"></part> </message> <message name="zakukaj"> <part name="arg0" type="xsd:int"></part> <message name="zakukajResponse"> <portType name="IZegarynka"> <operation name="ktoraGodzina" parameterOrder=""> <input message="tns:ktoraGodzina"></input> <output message="tns:ktoraGodzinaResponse"></output> </operation> <operation name="zakukaj" parameterOrder="arg0"> <input message="tns:zakukaj"></input> <output message="tns:zakukajResponse"></output> </portType> <binding name="ZegarynkaPortBinding" type="tns:IZegarynka"> ... </binding> <service name="ZegarynkaService"> <port name="ZegarynkaPort" binding="tns:ZegarynkaPortBinding"> <soap:address location=" </port> </service> </definitions> <portType name="IZegarynka"> <operation name="ktoraGodzina" parameterOrder=""> <input message="tns:ktoraGodzina"></input> <output message="tns:ktoraGodzinaResponse"></output> </operation> <operation name="zakukaj" parameterOrder="arg0"> <input message="tns:zakukaj"></input> <output message="tns:zakukajResponse"></output> </portType> <service name="ZegarynkaService"> <port name="ZegarynkaPort" binding="tns:ZegarynkaPortBinding"> <soap:address location=" </port> </service>
15
Klient usługi sieciowej
Przykłady
16
Klient usługi sieciowej – przykłady
Przykład wykorzystania usługi sieciowej Usługa TempConvert Adres dokumentu WSDL Udostępniane funkcje CelsiusToFahrenheit (wejście: string; wyjście: string) FahrenheitToCelsius (wejście: string; wyjście: string)
17
Klient usługi sieciowej – .NET, C#
18
Klient usługi sieciowej – .NET, C#
19
Klient usługi sieciowej – .NET, C#
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using WindowsApplication1.com.w3schools.www; namespace WindowsApplication1 { public partial class Form1 : Form public Form1() InitializeComponent(); } private void button1_Click(object sender, EventArgs e) string c = celsTB.Text; TempConvert service = new TempConvert(); string f = service.CelsiusToFahrenheit(c); fahrTB.Text = f;
20
Klient usługi sieciowej – Java
21
Klient usługi sieciowej – Java
22
Klient usługi sieciowej – Java
package tempconvertclient; import org.tempuri.TempConvert; import org.tempuri.TempConvertSoap; public class Main { public static void main(String[] args) { String s = "37.5"; TempConvertSoap tempConv = new TempConvert().getTempConvertSoap(); String f = tempConv.celsiusToFahrenheit(s); System.out.println(f); }
23
Klient usługi sieciowej – PHP
$url = " $client = new SoapClient($url); $res = $client->CelsiusToFahrenheit(array("Celsius" => "37.5")); print $res->CelsiusToFahrenheitResult; ?>
24
Implementacja usługi sieciowej
Java, JAX-WS
25
Implementacja usługi sieciowej
Usługa Zegarynka Zaimplementowana zostanie usługa udostępniająca dwie metody: String ktoraGodzina() String zakukaj(int ileRazy) Uproszczona implementacja z wykorzystaniem JAX-WS Wymagania: Java SE 6 Java SE 5 + Metro Web Services Stack Adnotacje (annotations) @WebService – oznaczenie klasy implementującej web service @WebMethod – oznaczenie metody udostępnianej przez web service
26
Implementacja usługi sieciowej
package pc.dyda.ws; import java.util.Calendar; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public class Zegarynka { @WebMethod public String ktoraGodzina() { ... } public String zakukaj(int ileRazy) {
27
Implementacja usługi sieciowej
@WebMethod public String ktoraGodzina() { return Calendar.getInstance().getTime().toString(); } public String zakukaj(int ileRazy) { StringBuilder sb = new StringBuilder(); for(int i=0; i<ileRazy; i++) sb.append("kuku"); return sb.toString();
28
Implementacja usługi sieciowej
Uruchomienie usługi Klasa Endpoint, metoda publish() Parametry: adres url, pod którym dostępna ma być usługa obiekt klasy implementującej usługę package pc.dyda; import javax.xml.ws.Endpoint; import pc.dyda.ws.Zegarynka; public class Uslugodawca { public static void main(String[] args) { String url = " Zegarynka zegar = new Zegarynka(); Endpoint.publish(url, zegar); }
29
Implementacja usługi sieciowej
Uruchomienie usługi Klasa Endpoint, metoda publish() package pc.dyda; import javax.xml.ws.Endpoint; import pc.dyda.ws.Zegarynka; public class Uslugodawca { public static void main(String[] args) { String url = " Zegarynka zegar = new Zegarynka(); Endpoint.publish(url, zegar); }
30
Implementacja usługi sieciowej
Uruchomienie usługi Uruchomienie klasy publikującej usługę (tutaj: pc.dyda.Uslugodawca) Z poziomu Netbeans: Run, F6 Z linii poleceń: java pc.dyda.Uslugodawca Test usługi Wejście przeglądarką na adres:
31
Usługa sieciowa ze złożonymi typami danych
package pc.ws; public class Student { private int numerAlbumu; private String imie; private String nazwisko; private String kierunek; private int rokStudiow; public Student() { } public Student(int nr, String imie, String nazwisko, String kierunek, int rok) { this.numerAlbumu = nr; this.imie = imie; this.nazwisko = nazwisko; this.kierunek = kierunek; this.rokStudiow = rok; } public String getImie() { return imie; } public void setImie(String imie) { this.imie = imie; } } JavaBean wymagany konstruktor bezargumentowy oraz gettery i settery
32
Usługa sieciowa ze złożonymi typami danych
package pc.ws; import ... @WebService() public class Dziekanat { List<Student> studenci = new ArrayList<Student>(); public Dziekanat() { } @WebMethod public List<Student> listaStudentow() { return studenci; } @WebMethod public Student znajdzStudenta( @WebParam(name="imie") String imie, @WebParam(name="nazwisko") String nazwisko) { for (Student student : studenci) { if(student.getImie().equalsIgnoreCase(imie) && student.getNazwisko().equalsIgnoreCase(nazwisko)) return student; } return null; } } @WebService() public class Dziekanat { @WebMethod public List<Student> listaStudentow() { return studenci; } @WebMethod public Student znajdzStudenta( @WebParam(name="imie") String imie, @WebParam(name="nazwisko") String nazwisko) { for (Student student : studenci) { if(...) return student; } return null; }
33
Usługa sieciowa ze złożonymi typami danych
Generowanie klas wrapperów XML Automatyczne, run-time Ręczne, za pomocą narzędzia wsgen: np. w przypadku projektu NetBeans: wsgen [opcje] nazwa klasy implementującej usługę wsgen -cp build/classes -s src -d build/classes -keep pc.ws.Dziekanat
34
Usługa sieciowa ze złożonymi typami danych Klient C#
DziekanatClient d = new DziekanatClient(); student s = d.znajdzStudenta("Jan", "Kowalski"); label1.Text = s.numerAlbumu.ToString(); DziekanatClient d = new DziekanatClient(); student[] studenci = d.listaStudentow(); label1.Text = studenci.Length.ToString();
35
Usługa sieciowa ze złożonymi typami danych Komunikaty SOAP
<s:Envelope xmlns:s=" <s:Body xmlns:xsi=" xmlns:xsd=" <znajdzStudenta xmlns=" <imie xmlns="">Jan</imie> <nazwisko xmlns="">Kowalski</nazwisko> </znajdzStudenta> </s:Body> </s:Envelope> <?xml version="1.0" ?> <S:Envelope xmlns:S=" <S:Body> <ns2:znajdzStudentaResponse xmlns:ns2=" <return> <imie>Jan</imie> <kierunek>zoologia</kierunek> <nazwisko>Kowalski</nazwisko> <numerAlbumu>111</numerAlbumu> <rokStudiow>3</rokStudiow> </return> </ns2:znajdzStudentaResponse> </S:Body> </S:Envelope>
36
Usługa sieciowa ze złożonymi typami danych Komunikaty SOAP
<?xml version="1.0"?> <S:Envelope xmlns:S=" <S:Body> <ns2:listaStudentowResponse xmlns:ns2=" <return> <imie>Jan</imie> <kierunek>zoologia</kierunek> <nazwisko>Kowalski</nazwisko> <numerAlbumu>111</numerAlbumu> <rokStudiow>3</rokStudiow> </return> <imie>Gal</imie> <kierunek>informatyka</kierunek> <nazwisko>Anonim</nazwisko> <numerAlbumu>123</numerAlbumu> <rokStudiow>4</rokStudiow> ... </ns2:listaStudentowResponse> </S:Body> </S:Envelope> <s:Envelope xmlns:s=" <s:Body xmlns:xsi=" xmlns:xsd=" <listaStudentow xmlns=" /> </s:Body> </s:Envelope>
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.