Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Integracja aplikacji Wykład 2

Podobne prezentacje


Prezentacja na temat: "Integracja aplikacji Wykład 2"— Zapis prezentacji:

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="http://www.w3.org/2001/12/soap-envelope" soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding"> <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="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <CelsiusToFahrenheit xmlns="http://tempuri.org/"> <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: "http://tempuri.org/CelsiusToFahrenheit" <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <CelsiusToFahrenheit xmlns="http://tempuri.org/"> <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="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.dyda.pc/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.dyda.pc/" 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="http://localhost:9876/zegarynka"></soap:address> </port> </service> </definitions> <?xml version="1.0" encoding="UTF-8"?> <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.dyda.pc/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.dyda.pc/" 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="http://localhost:9876/zegarynka"></soap:address> </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="http://localhost:9876/zegarynka"></soap:address> </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 = "http://www.w3schools.com/webservices/tempconvert.asmx?WSDL"; $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 = "http://localhost:9876/zegarynka"; 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 = "http://localhost:9876/zegarynka"; 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="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <znajdzStudenta xmlns="http://ws.pc/"> <imie xmlns="">Jan</imie> <nazwisko xmlns="">Kowalski</nazwisko> </znajdzStudenta> </s:Body> </s:Envelope> <?xml version="1.0" ?> <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:znajdzStudentaResponse xmlns:ns2="http://ws.pc/"> <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="http://schemas.xmlsoap.org/soap/envelope/"> <S:Body> <ns2:listaStudentowResponse xmlns:ns2="http://ws.pc/"> <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="http://schemas.xmlsoap.org/soap/envelope/"> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <listaStudentow xmlns="http://ws.pc/" /> </s:Body> </s:Envelope>


Pobierz ppt "Integracja aplikacji Wykład 2"

Podobne prezentacje


Reklamy Google