http , rmi , soap a ďalšie akronymy pre výmenu dát medzi počítačmi

41
HTTP, RMI, SOAP… 1 BEZADIS, 12. 2. 2008 HTTP, RMI, SOAP a ďalšie akronymy pre výmenu dát medzi počítačmi Róbert Novotný [email protected] i n g H T e s a p N E T P C

Upload: tracen

Post on 31-Jan-2016

49 views

Category:

Documents


0 download

DESCRIPTION

HTTP , RMI , SOAP a ďalšie akronymy pre výmenu dát medzi počítačmi. Róbert Novotný [email protected]. Prečo? Začo? Načo?. výmena dát je takpovediac štandardom medzi ľuďmi medzi človekom a počítačom medzi počítačom a počítačom ak dáta neprúdia, niečo je zle - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 1BEZADIS, 12. 2. 2008

HTTP, RMI, SOAP a ďalšie akronymy pre výmenu dát medzi

počítačmiRóbert Novotný[email protected]

ingHT

es

apNET

PC

Page 2: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 2BEZADIS, 12. 2. 2008

Prečo? Začo? Načo?

• výmena dát je takpovediac štandardom– medzi ľuďmi– medzi človekom a počítačom– medzi počítačom a počítačom

• ak dáta neprúdia, niečo je zle• klasický príklad: výmena dát medzi

prehliadačom– protokol: HTTP– dáta: HTML, čistý text, binárny neporiadok

• človek dátam rozumie, čo však počítač?

Ako ustanoviť protokoly pre jednoduchú výmenu štruktúrovaných dát medzi dvoma počítačmi?

Page 3: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 3BEZADIS, 12. 2. 2008

Filozofia

• už od nepamäti (197x): filozofia vzdialeného volania procedúr (remote procedure call, RPC)

• viacero špecifikácií: RPC, CORBA, DCOM, SOAP...

• cieľ:– jednoduché nastavenie– jazykovo a platformovo nezávislé– zamlženie "lokálne volanie-vzdialené

volanie"– podpora prirodzených dátových typov

Page 4: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 4BEZADIS, 12. 2. 2008

Prihlasovanie sa na skúšky

• jednoduchý príklad prihlasovania sa na skúšku

• dohodnime sa na operáciách– zoznam termínov pre daný predmet– prihlásenie sa na daný predmet na daný dátum

• operácie budú reprezentované interfejsom

public interface ExamRegistration { List<Term> getTerms(String courseCode);

boolean signup(Student student, String courseCode, Date date);}

Page 5: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 5BEZADIS, 12. 2. 2008

Prečo interfejs?

• môžeme vyrobiť viacero implementácií– jednoduchú s napevno danými termínmi– databázovú– integrujúcu sa s AISom– používajúcu vzdialené volania

• implementácie môžeme vymieňať a aplikácia bude vyžadovať minimum zmien

public class SimpleExamRegistration implements ExamRegistration { ...}

Page 6: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 6BEZADIS, 12. 2. 2008

RMI – vzdialené volanie metód

• RMI – remote method invocationhttp://java.sun.com/javase/technologies/core/basic/rmi/index.jsp

• transportná vrstva: TCP• serializácia: binárna, prebratá z Javy• interop: len Java vs. Java

Page 7: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 7BEZADIS, 12. 2. 2008

RMI – základné pojmy

• vzdialený objekt: metódy sú volané klientom. Reprezentovaný service classom.

• registry: register objektov, ktoré dokážu obsluhovať vzdialené volania od klientov

• server: vykonáva registráciu vzdialených objektov• skeleton: špinavá práca na strane servera –

sieťová komunikácia, (de)serializácia objektov• stub: špinavá

práca na strane klienta

ServerKlient

Stub Skeleton

Registry Server

Klientskátrieda

Obslužnátrieda

Page 8: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 8BEZADIS, 12. 2. 2008

RMI – ako vyzerá komunikácia?

• ako vyzerá typická správa?• binárny neporiadok posielaný cez TCP• objekty sú serializované pomocou Java

Serialization• špecifikácia binárneho formátu:

http://java.sun.com/javase/6/docs/platform/serialization/spec/serialTOC.html

Page 9: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 9BEZADIS, 12. 2. 2008

Postup krokov v klasickom RMI

Server:• vytvoriť vzdialený interface s

metódami (extends Remote, metódy throws RemoteException)

• vytvoriť implementačnú triedu• zaregistrovať triedu v RegistryKlient:• získať objekt Registry z daného servera• získať interfejs (za ním je stub)• na ňom volať metódy

Page 10: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 10BEZADIS, 12. 2. 2008

Ukážka kódu

public interface ExamRegistration extends java.rmi.Remote{ List<Term> getTerms(String courseCode) throws java.rmi.RemoteException;

boolean signup(Student student, String courseCode, Date date) throws java.rmi.RemoteException;}

• Hádzanie výnimiek musíme dodať aj do implementácie (teda do SimpleExamRegistration)

• všetky triedy používané vo volaniach musia implementovať interfejs java.io.Serializable!

– public class Student implements Serializable– public class Term implements Serializable

Page 11: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 11BEZADIS, 12. 2. 2008

Ukážka kódu servera

ExamService service = new SimpleExamService();

1. Vytvoríme inštanciu implementácie

ExamService skeleton = (ExamService) UnicastRemoteObject.exportObject(service, 0);

Registry registry = LocateRegistry.getRegistry();

2. Pretvoríme ju na skeleton, teda vzdialený objekt

registry.rebind("EXAM", skeleton);

3. Získame inštanciu registry

4. Zaregistrujeme skeleton v registry

Page 12: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 12BEZADIS, 12. 2. 2008

Ukážka kódu klienta

Registry registry = LocateRegistry.getRegistry("localhost");

1. získať objekt registry z daného servera

ExamService stub = (ExamService) registry.lookup("EXAM");

stub.getTerms("UINF/PAZ1c");

2. získať interfejs (za ním je stub)

ExamService stub = java.rmi.Naming.lookup("//localhost/EXAM")stub.getTerms("UINF/PAZ1C");

3. voláme metódy klasickým spôsobom

Alternatívne môžeme použiť aj:

Page 13: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 13BEZADIS, 12. 2. 2008

Výhody a nevýhody

+ jednoduché použitie, priamo v Jave, žiadne závislosti

+ v prípade, že sa u klienta nenachádzajú binárky tried, je možné ich dotiahnuť zo servera- pomerne náročná konfigurácia

- firewally blokujú komunikáciu+ možno tunelovať cez HTTP- náročná konfiguráciaAk nepotrebujeme interop a vieme, že firewally

nie sú problémom, je RMI najjednoduchšou cestou.

Page 14: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 14BEZADIS, 12. 2. 2008

Caucho Hessian / Burlap

• Hessianhttp://hessian.caucho.com/

• Burlaphttp://www.caucho.com/resin-3.0/protocols/burlap.xtp

• transportná vrstva: HTTP• serializácia:

– binárna (Hessian)– XML (Burlap)

• interop: – Hessian: implementácie v C++, C#, Python, PHP– Burlap: len Java-Java

Page 15: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 15BEZADIS, 12. 2. 2008

Hessian – základné pojmy

• HessianServlet (BurlapServlet): na strane servera spracováva HTTP požiadavky, (de)serializuje objekty a priamo volá implementačnú triedu.

• interfejs: zodpovedá interfejsu z príkladu. Hessian zaň na strane klienta i serveru dosadí implementáciu podporujúcu vzdialené volania

• proxy: na strane klienta rieši HTTP komunikáciu a (de)serializáciu objektov

Servletovýkontajner

Klient

proxy

<<interface>>

interfejs

HessianServlet

Page 16: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 16BEZADIS, 12. 2. 2008

Hessian / Burlap – ako vyzerá komunikácia?

• ako vyzerá typická správa?• Hessian: HTTP POST požiadavka, dáta v

binárnej forme• Burlap: HTTP POST požiadavka, dáta v XML

POST / HTTP/1.1Content-Type: text/xmlUser-Agent: Java/1.5.0_09Host: 127.0.0.1:8888Connection: keep-aliveContent-Length: 58

<burlap:call><method>getCurrentDate</method></burlap:call>

HTTP/1.1 200 OKContent-Length: 62Server: Jetty(6.1.5)

<burlap:reply><date>20080311T223714.671Z</date></burlap:reply>

Page 17: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 17BEZADIS, 12. 2. 2008

Postup krokov pri použití

Servletový kontajner:• vytvoriť inštanciu implementačnej triedy• nakonfigurovať HessianServlet

(BurlapServlet) a priradiť mu implementačný objekt

Klient:• vytvoriť továreň na proxy volajúcu

príslušnú URL adresu• získať z nej interfejs (za ním je stub)• na ňom volať metódy

Page 18: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 18BEZADIS, 12. 2. 2008

Ukážka kódu servera (Jetty)

ExamService service = new SimpleExamService();

1. Vytvoríme inštanciu implementácie

HessianServlet hessianServlet = new HessianServlet();hessianServlet.setHomeAPI(ExamService.class);hessianServlet.setHome(new SimpleExamService());

Server server = new Server(8080);

Context context = new Context(server, "/terms");context.addServlet(new ServletHolder(hessianServlet), "/*");

server.start();server.join();

2. Nakonfigurujeme HessianServlet, priradíme mu inštanciu

3. Nakonfigurujeme servletový kontajner a spustíme ho

Služba bude dostupná na http://localhost:8080/terms

Page 19: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 19BEZADIS, 12. 2. 2008

Alternatíva: nasadenie do servlet. kontajnera

• HessianServlet je klasický servlet, môžeme ho teda nasadiť do servletového kontajnera (Tomcat, Jetty...)

<servlet> <servlet-name>TermsServlet</servlet-name> <servlet-class> com.caucho.hessian.server.HessianServlet </servlet-class> <init-param> <param-name>home-class</param-name> <param-value>sk.novotnyr.SimpleExamService</param-value> </init-param> <init-param> <param-name>home-api</param-name> <param-value>sk.novotnyr.ExamService</param-value> </init-param></servlet>

<servlet-mapping> <url-pattern>/*</url-pattern> <servlet-name>TermsServlet</servlet-name></servlet-mapping>

Služba bude dostupná na http://localhost:8080/terms

web.xml

Page 20: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 20BEZADIS, 12. 2. 2008

Ukážka kódu klienta

HessianProxyFactory factory = new HessianProxyFactory();

1. vytvoriť továreň na proxy

String url = "http://localhost:8080/terms";TermService proxy

= (TermService) factory.create(TermService.class, url);

List<Term> terms = proxy.getTerms("UINF/PAZ1c");

2. získať interfejs pre danú URL adresu (za ním je proxy)

3. voláme metódy klasickým spôsobom

BurlapServlet a BurlapProxyFactory fungujú analogicky

Page 21: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 21BEZADIS, 12. 2. 2008

Výhody a nevýhody

+ jednoduché použitie, knižnica je 273 kB JAR, žiadne závislosti

+ ten je možné ešte zmenšiť (Hessian 83 kB)+ jestvuje aj minimalistická verzia aj pre J2ME

(mobily)+ slušný interop (len Hessian)+ čitateľné správy (len Burlap)- vlastný mechanizmus serializácie môže zlyhávať v

extrémnych prípadoch

Ak potrebujeme interop a RMI robí problémy, je to dobrá alternatíva.

Burlap = (Hessian + XML) - interop

Page 22: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 22BEZADIS, 12. 2. 2008

Spring HTTP Invoker

• Spring HTTP Invokerhttp://www.springframework.org/

• transportná vrstva: HTTP• serializácia: binárna, prebratá z Javy• interop: len Java-Java

Page 23: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 23BEZADIS, 12. 2. 2008

Spring HTTP Invoker – základné pojmy

• DispatcherServlet: servlet, cez ktorý idú všetky požiadavky v Spring Frameworku.

• HttpInvokerServiceExporter: vie zobrať ľubovoľnú triedu a interfejs a vytvoriť z neho vzdialene volateľný objekt. Obohatí ju o schopnosť (de)serializovať objekty

• proxy: na strane klienta rieši HTTP

komunikáciu a (de)serializáciu objektov

Servletovýkontajner

Klient

proxyKlientskátrieda

<<interface>>

interfejs

DispatcherServlet

Obslužnátrieda

HttpInvokerServiceExporter

Page 24: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 24BEZADIS, 12. 2. 2008

Spring HTTP Invoker – ako vyzerá komunikácia?

• ako vyzerá typická správa?

• HTTP POST požiadavka, za ňou dáta v binárnej forme

• objekty sú serializované pomocou Java Serialization

• posielané inštancie musia implementovať java.io.Serializable

Page 25: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 25BEZADIS, 12. 2. 2008

Postup krokov pri použití

Servletový kontajner:• nakonfigurovať DispatcherServlet• vytvoriť inštanciu implementačnej triedy• nakonfigurovať

HttpInvokerServiceExporter a asociovať s ním implementačnú triedu

Klient:• vytvoriť továreň na proxy volajúcu

príslušnú URL adresu• získať z nej interfejs (za ním je proxy)• na ňom volať metódy

Page 26: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 26BEZADIS, 12. 2. 2008

Ukážka kódu servera (Jetty)

DispatcherServlet dispatcher = new DispatcherServlet();dispatcher.setContextConfigLocation("classpath:ctx.xml");

1. Nakonfigurujeme DispatcherServlet

<bean name="/terms" class="org.springframework.[…].HttpInvokerServiceExporter"> <property name="service"> <bean class="sk.novotnyr.SimpleExamRegistration" /> </property> <property name="serviceInterface" value="sk.novotnyr.ExamRegistration" /></property></bean>

2. Nakonfigurujeme springovský aplikačný kontext

3. Nakonfigurujeme servletový kontajner a spustíme ho (viď príklad z konfigurácie Hessianu)

ctx.xml

Page 27: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 27BEZADIS, 12. 2. 2008

Ukážka kódu klienta

HttpInvokerProxyFactoryBean factory = new HttpInvokerProxyFactoryBean();

1. vytvoriť továreň na proxy

factory.setServiceInterface(ExamRegistration.class);factory.setServiceUrl("http://localhost:8080/");factory.afterPropertiesSet();

List<Term> terms = proxy.getTerms("UINF/PAZ1c");

2. nastaviť obslužný interfejs a URL (za ňou je proxy)

3. voláme metódy klasickým spôsobom

Page 28: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 28BEZADIS, 12. 2. 2008

Výhody a nevýhody Spring HTTP Invoker

+ ponecháva výhody RMI, odstraňuje jeho neduhy

+ možno exportnúť ľubovoľný interfejsv RMI sme museli dediť od Remote a hádzať výnimky

- žiadny interop- pomerne veľký JAR so závislosťami (1,7

MB), keďže používame Spring Framework

Ak používame Spring Framework, Spring HTTP Invoker je veľmi užitočným vylepšením RMI.

Page 29: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 29BEZADIS, 12. 2. 2008

SOAP / Web Services

• Web Services – webové službyhttp://www.w3.org/2002/ws/

• SOAP – protokol pre výmenu XML správ• transportná vrstva: HTTP, SMTP (maily),

JMS (Java Messaging), Jabber, JavaVM (v rámci virtuálneho stroja)

• serializácia: XML• interop: univerzálny

Posielame XML dáta z bodu A do bodu B.

Page 30: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 30BEZADIS, 12. 2. 2008

Web Services – základné pojmy

Endpoint

Service

PortgetCourses()

signup()

KlientSOAP správa

Popis služby(WSDL)

Page 31: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 31BEZADIS, 12. 2. 2008

Web Services – základné pojmy

• endpoint: spracováva SOAP správy a odpovedá na ne, rieši (de)serializáciu

• operácia: vzdialene volateľná metóda

• port: logická množina operácii. Analógia interfejsu z OOP

• služba: logická množina portov

• binding: určuje formát správ a používaný transport

• popis služby: metadáta o službe – zoznam služieb, portov, operácií, dátové typy, návratové hodnoty, špecifikácia transportného protokolu.

Popis služieb pomocou XML jazyka WSDL.

Page 32: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 32BEZADIS, 12. 2. 2008

SOAP – ako vyzerá komunikácia?

[HTTP POST hlavička][XML hlavička]<SOAP-ENV:Envelope> <SOAP-ENV:Body> <ns1:doubleAnInteger <param1 xsi:type="xsd:int">123</param1> </ns1:doubleAnInteger> </SOAP-ENV:Body></SOAP-ENV:Envelope>

[hlavička HTTP odpovede][XML hlavička]<SOAP-ENV:Envelope <SOAP-ENV:Body> <ns1:doubleAnIntegerResponse <return xsi:type="xsd:int">246</return> </ns1:doubleAnIntegerResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope>

Otázka i odpoveď vyzerajú na prvý pohľad ešte horšie, toto

je zjednodušená verzia...

Page 33: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 33BEZADIS, 12. 2. 2008

SOAP a implementácie v Jave

• SOAP je všeobecný, jestvuje viacero Java implementácií

– Apache Axis 2 http://ws.apache.org/axis2/

– Apache CXF (zlúčenie CodeHaus XFire + ObjectWeb Celtix) http://incubator.apache.org/cxf

– každý aplikačný server poskytuje svoju implementáciu (JBoss, IBM WebSphere)

• v Jave existuje štandardizovaná sada interfejsov a tried: JAX-WS (http://java.sun.com/webservices/technologies)

• pre jednoduchosť ukážeme: CXF nad HTTP transportom

Page 34: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 34BEZADIS, 12. 2. 2008

Postup krokov v SOAP – zdola nahor

Server:• začneme od metadát – vytvoríme WSDL• vygenerujeme triedy pre serverovskú

časť• dodáme implementáciu• zverejníme WSDL a adresu koncového

bodu

Klient:• získame WSDL• vygenerujeme klientské triedy

Výhodné, ak máme v úmysle interop

Page 35: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 35BEZADIS, 12. 2. 2008

Postup krokov v SOAP – zhora nadol

Server:• vezmeme interfejs a oanotujeme ho• zverejníme ho (metadáta sa

vytvoria automaticky)Klient:• získame WSDL• vygenerujeme klientské triedy• alebo vezmeme továreň, ktorá vráti

proxy

Výhodné, ak chceme rýchlo niečo spustiť.

Page 36: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 36BEZADIS, 12. 2. 2008

Postup krokov v SOAP – zhora nadol s JAX-WS

Server:• vezmeme interfejs a oanotujeme ho

@WebServicepublic interface ExamRegistration { List<Term> getTerms(String courseCode);

boolean signup(Student student, String courseCode, Date date);}

• zverejníme ho (metadáta sa vytvoria automaticky)

import javax.xml.ws.Endpoint;

Endpoint.publish("http://localhost:8080/terms", new SimpleExamRegistration());

Page 37: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 37BEZADIS, 12. 2. 2008

Postup krokov v SOAP – zhora nadol s JAX-WS

• automaticky sa vytvorí endpoint na danej adrese• vytvorí sa:

– služba ExamRegistrationService– port ExamRegistration– operácie getTerms() a signup()– automatické mapovanie tried Student a Term na

XML reprezentácie a späť– binding pre HTTP protokol

• spustí sa HTTP server• metadáta sa zverejnia na

http://localhost:8080/terms?wsdl

Endpoint.publish("http://localhost:8080/terms", new SimpleExamRegistration());

Page 38: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 38BEZADIS, 12. 2. 2008

Ukážka kódu pre klienta s JAX-WS1. získame adresu WSDL metadát2. spustíme generovanie tried pre klienta

2. vygeneruje sa množstvo tried do balíčka sk.novotnyr

ExamRegistrationService service = new ExamRegistrationService()ExamService proxy = service.getPort(ExamService.class);

wsdl2java.bat -d d:\bezadis\src -p sk.novotnyr.client http://localhost:8080/terms?wsdl

3. vytvoríme inštanciu služby a z nej získame inštanciu proxy

4. na proxy voláme metódy

ExamRegistrationService, GetTerms, GetTermsResponse,...

ExamRegistrationService sa vytvorí nad adresou prebratou zo servera a nad príslušným

WSDL

Page 39: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 39BEZADIS, 12. 2. 2008

Výhody a nevýhody SOAP

+ buzzword

+ maximálna flexibilita

+ možno zvoliť ľubovoľný transport

+ neobmedzený interop

+ bezpečnosť - podpisovanie správ, šifrovanie, timestamping, garantované doručenie...

- často zložitá konfigurácia

- nutnosť uvážiť výkon (konverzia na XML reprezentáciu je náročná)

- pre samostatnú serverovskú aplikáciu treba často kopu JARov (CXF: 17MB!)

+ od Javy 6 je k dispozícii priama podpora pre SOAP

Ak vieme, že interop je prioritou, nemáme inú možnosť.

Všeobecnosť a komplexnosť = širšie a komplexnejšie problémy

Page 40: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 40BEZADIS, 12. 2. 2008

Sumár

ProtokolTranspor

tSerializáci

aInterop

Bezpečnosť

RMI TCPbinárna

Javanie nie

Spring HTTP Invoker

HTTPbinárna

Java nie nie

Hessian HTTPbinárna vlastná

významné platformy

nie

Burlap HTTPXML

vlastnánie nie

SOAPmnohorak

ý

XMLľubovoľná áno

podpisovanie, šifrovanie, timestampy

Page 41: HTTP ,  RMI ,  SOAP  a ďalšie akronymy pre výmenu dát medzi počítačmi

HTTP, RMI, SOAP… 41BEZADIS, 12. 2. 2008

Otázky?