Integracja aplikacji Wykład 2

Slides:



Advertisements
Podobne prezentacje
Wstęp do strumieni danych
Advertisements

Równoległość w środowisku rozproszonym
Mechanizmy pracy równoległej
Programowanie Wizualne WYKŁAD 5
Rafał Hryniów Tomasz Pieciukiewicz
SQL Server Native XML Web Services
WEB SERVICE Stefan Rutkowski.
Service Oriented Architecture & Web Services
XML w integracji aplikacji
11 XML w integracji aplikacji. 22 Cel: umożliwienie wymiany danych pomiędzy aplikacjami: aplikacje/komponenty/moduły posługują się różnymi formatami wewnętrznymi,
XML w integracji aplikacji 11 grudnia XML w integracji aplikacji Cel: umożliwienie wymiany danych pomiędzy aplikacjami: aplikacje/komponenty/moduły.
Nguyen Hung Son Uniwersytet Warszawski
Nowa wersja C# Autor: Piotr Sobczak
Technologie XML Mgr inż. Michał Jaros Technologie XML wykład 1.
Opracował: Patryk Kołakowski(s1715)
.NET - możliwości Jarosław Balcer & Jan Góralski.
RMI I RMI-IIOP Wprowadzenie Co to jest RMI?
Internet Communication Engine
Model – View - Controler
Tworzenie ASP.NET Web Form
Przetwarzanie rozproszone
Programowanie w środowiskach zintegrowanych wykład 1 PSZ Programowanie w Środowiskach Zintegrowanych > Systemy i środowiska zintegrowane > Środowisko zintegrowane.
Gniazda komunikacji sieciowej w języku Java
Pakiety i ATD 1 Definicja. Pakietem albo jednostką programową nazywamy grupę logicznie powiązanych elementów, które mogą być typami, podtypami, obiektami.
P I OTR SKOŁYSZ. POCHODZENIE I CELE CZYM JEST.NET ? CO IMPLEMENTUJE MONO ? ŚRODOWISKO PRACY [MONODEVELOP] SYTEMY OPERACYJNE CO PROGRAMOWAĆ ? JĘZYKI PRZYKŁADOWY.
.NET Remoting Łukasz Zawadzki.
Paweł Fałat Katedra Informatyki Stosowanej
Język Java Wielowątkowość.
Architektura SOA.
C# Windows Forms Zastosowania Informatyki Wykład 3
Jakub Binkowski Visual C# MVP webEFS sp.j.. GET i POST.
Test Doubles Adam Gabryś , v1.1,
Pakiety w Javie Łukasz Smyczyński (132834). Czym są pakiety? Klasy w Javie są grupowane w pewne zbiory zwane pakietami. Pakiety są więc pewnym podzbiorem.
Platformy Technologiczne web services
Aplikacje Internetowe
Web Serwisy w praktyce Technologie internetowe ( )
Java 3 MPDI Programowanie obiektowe W7. import java.io.*; public class X { // kontrukcja throws – określenie jakie wyjątki może dana metoda // sygnalizować
PIO 3_2, Zofia Kruczkiewicz1 Wykład 3 – część druga Iteracyjno-rozwojowy cykl oprogramowania 3.
WebAPI – funkcjonalność i rozwój narzędzia
Tworzenie aplikacji mobilnych
Tworzenie aplikacji mobilnych
Programowanie obiektowe – zastosowanie języka Java SE
JAVA c.d.. Instrukcji wyboru SWITCH używamy, jeśli chcemy w zależności od wartości pewnego wyrażenia wykonać jeden z kilku fragmentów kodu. Jest to w.
Programowanie obiektowe III rok EiT dr inż. Jerzy Kotowski Wykład IX.
Java – coś na temat Klas Piotr Rosik
Seminarium problemowe
Wykonał: Michał Nikołajuk
PIO 2_2, Zofia Kruczkiewicz1 Wykład 2 – część druga Iteracyjno-rozwojowy cykl oprogramowania 2.
Internetowe surfowanie
Programowanie obiektowe 2013/2014
S IMON SAYS … A RCHITECTURE ! Usługi zdalne Technologie, techniki i praktyki implementacji.
Programowanie sieciowe w Javie
OCPJP Inner classes.
Integracja aplikacji Wykład 4
Service Oriented Architecture
Treści multimedialne - kodowanie, przetwarzanie, prezentacja Odtwarzanie treści multimedialnych Andrzej Majkowski informatyka +
Programowanie strukturalne i obiektowe C++ Przeładowanie operatorów Robert Nowak.
Podstawy programowania (4)
K URS JĘZYKA C++ – WYKŁAD 1 ( ) Łagodne wprowadzenie do języka C++
DOM Ewa Dukała Piotr Muszyński. DOM DocumentBuilder Factory Document Builder XML Data object obiectobject DocumentDOM.
Technologie internetowe Wykład 5 Wprowadzenie do skrytpów serwerowych.
Piotr Czapiewski Wydział Informatyki ZUT. Web Services Description Language.
XML w serwisach webowych. Zapotrzebowanie na serwisy XML.
PROGRAMOWANIE W JAVA Informatyka Stosowana – ROK II / III Laboratoria mgr inż. Krzysztof Bzowski.
Web services w PHP Inżynieria e-systemów - technologia Java Miłosz Dybizbański Małgorzata Gocał Kinga Knapik
Programowanie Obiektowe – Wykład 6
(według:
Programowanie Obiektowe – Wykład 2
Programowanie obiektowe – zastosowanie języka Java SE
Aplikacje i usługi internetowe
Zapis prezentacji:

Integracja aplikacji Wykład 2 Piotr Czapiewski Wydział Informatyki ZUT Integracja aplikacji Wykład 2

Web services

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. http://www.w3.org/TR/ws-gloss/

Rodzaje usług sieciowych Web Services Big Web Services RESTful Web Services XML, SOAP, WSDL

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

Architektura usług sieciowych Jeden dostawca, wielu klientów

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

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

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>

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>

Komunikat SOAP w żądaniu HTTP POST /webservices/tempconvert.asmx HTTP/1.1 Host: www.w3schools.com 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>

SOAP w praktyce Klient Web service Biblioteki SOAP Biblioteki SOAP SOAP: żądanie Biblioteki SOAP SOAP: odpowiedź

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

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>

Klient usługi sieciowej Przykłady

Klient usługi sieciowej – przykłady Przykład wykorzystania usługi sieciowej Usługa TempConvert http://www.w3schools.com/webservices/tempconvert.asmx Adres dokumentu WSDL http://www.w3schools.com/webservices/tempconvert.asmx?WSDL Udostępniane funkcje CelsiusToFahrenheit (wejście: string; wyjście: string) FahrenheitToCelsius (wejście: string; wyjście: string)

Klient usługi sieciowej – .NET, C#

Klient usługi sieciowej – .NET, C#

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;

Klient usługi sieciowej – Java

Klient usługi sieciowej – Java

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); }

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; ?>

Implementacja usługi sieciowej Java, JAX-WS

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

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) {

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();

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); }

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); }

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: http://localhost:9876/zegarynka?wsdl

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

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; }

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

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();

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>

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>