Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Webszervizek (JAX-WS, és JAX-RS) bemutatása

Hasonló előadás


Az előadások a következő témára: "Webszervizek (JAX-WS, és JAX-RS) bemutatása"— Előadás másolata:

1 Webszervizek (JAX-WS, és JAX-RS) bemutatása
Nagy Zoltán Arnold

2 Miért van szükség webszervizekre?
Hogy ne találja ki mindenki a saját protokollját – szabvány rögzíti mind az üzenetek formátumát, mind az üzenetcsere protokollját (pl HTTP feletti SOAP üzenetek, amik XMLből állnak) Hogy ne legyünk platformhoz kötve mondjuk tudjuk C# kliensből hívni a Java EE -s webszervizeinket Hogy el tudjuk osztani az alkalmazásainkat a hívó félnek teljesen mindegy, hogy egy cluster, vagy egy gép a célpont

3 Lehetőségek Java API for XML Web Services (JAX-WS, JSR 244)
A JAX-RPC utódja Web Service Definition Language (WSDL) <> Java összerendelhetőséget tesz lehetővé Metódushívást tesz lehetővé, az üzenetek SOAP üzenetek, XMLként utaznak valamilyen protokoll felett (általában HTTP(S)) Java API for RESTful Web Services (JAX-RS, JSR 311) A metódusokat felváltják az erőforrások Lényegében a domain modellt nyujtja át a felhasználónak JAXB a felelős mindkettőnél a Java <> XML áthidalására Példa: egy blognál az addPost() metódus a fontos, vagy hogy a blogon postok vannak? Jobb lenne őket közvelten kezelni?

4 JAX-WS (Java SE) @WebService public class Szamologep { @WebMethod(operationName=”osszead”) public int int a, @WebParam(name=”b”) int b) { return a + b; } } public static void main(String[] args) { Endpoint.publish(“ new Szamologep()); }

5 JAX-WS (Java SE) @WebService @Stateless public class Szamologep { @WebMethod(operationName=”osszead”) public int int a, @WebParam(name=”b”) int b) { return a + b; } }

6 Java kliens import elte.ws.SzamologepService; import elte.ws.Szamologep; class SzamologepClient { public static void main(String[] args) { try { SzamologepService service = new SzamologepService(); Szamologep port = service.getSzamologepPort(); System.out.println("1+2: " + port.osszead(1,2)); } catch (Exception e) { e.printStackTrace(); } } }

7 Futtatásnál... Kimenő kérés (HTTP POST):
<?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S=" <S:Header/> <S:Body> <ns2:osszead xmlns:ns2=" <a>1</a> <b>2</b> </ns2:osszead> </S:Body> </S:Envelope>

8 Futtatásnál... Válasz: <?xml version="1.0" encoding="UTF-8"?> <S:Envelope xmlns:S=" <S:Body> <ns2:osszeadResponse xmlns:ns2=" <return>3</return> </ns2:osszeadResponse> </S:Body> </S:Envelope>

9 JAX-RS A domain modellben lévő objektumokkal dolgozik a felhasználó, valamilyen absztrakción keresztül (egy objektum ~ egy resourcekezelő, pl employeeshoz: /employees) Általában mindig egy interfészt valósítunk meg, itt sincs ez másképp: a definiált interfész a HTTP, ennek a műveleteit valósíthatjuk meg GET: adatok lekérése PUT: új adat beszúrása POST: már meglévő adat frissítése DELETE: adat törlése HEAD, OPTIONS A JAX-RS referenciaimplementáció lényegében egy Servlet, ami “érti” a JSR-311 -es annotációkat, és így tudja használni az általunk írt resourceokat

10 JAX-RS (folytatás) Az erőforrások főnevek az URI azonosítja
Egységes interfész Jól bevált szabvány, a HTTP Példa zenetárra: /movies/directors/ - az összes filmrendező /movies/directors/{id} – egy rendező kiválasztása /movies/directors/{id}/movies – a rendező filmjeinek a listája Az adat lehet bármi: XML, JSON, Atom, XHTML, … Kik használják? Amazon, Google ...véletlen: flickr, del.icio.us

11 JAX-RS (folytatás) Az erőforrások főnevek az URI azonosítja
Egységes interfész Jól bevált szabvány, a HTTP Példa zenetárra: /movies/directors/ - az összes filmrendező /movies/directors/{id} – egy rendező kiválasztása /movies/directors/{id}/movies – a rendező filmjeinek a listája Az adat lehet bármi: XML, JSON, Atom, XHTML, … Kik használják? Amazon, Google ...véletlen: flickr, del.icio.us

12 JAX-RS erőforrás @Path("/uzenetek") @Singleton public class UzenetResource { private final LinkedList<Uzenet> uzenetek = new LinkedList<Uzenet>(); @GET @Produces(MediaType.APPLICATION_XML) public List<String> getUzenetek() { return uzenetek; } @PUT @Consumes(MediaType.TEXT_PLAIN) public Response postUzenet(String uzenet) { uzenetek.add(uzenet); return Response.ok().build(); } }

13 JAX-RS használat, PUT ~]$ curl -v -X PUT -H 'Content-type: text/plain' -d 'hello3' -L * About to connect() to localhost port * Trying connected * Connected to localhost ( ) port > PUT /uzenetek HTTP/1.1 > User-Agent: curl/ (x86_64-redhat-linux-gnu) libcurl/ OpenSSL/0.9.8b zlib/1.2.3 libidn/ > Host: localhost:9812 > Accept: */* > Content-type: text/plain > Content-Length: 6 > > hello3HTTP/ OK < server: grizzly/ < Content-Length: 0 < Date: Fri, 04 Dec :44:15 GMT * Connection #0 to host localhost left intact * Closing connection #0 ~]$

14 JAX-RS használat, GET ~]$ curl -H GET -v * About to connect() to localhost port * Trying connected * Connected to localhost ( ) port > GET /uzenetek HTTP/1.1 > User-Agent: curl/ (x86_64-redhat-linux-gnu) libcurl/ OpenSSL/0.9.8b zlib/ libidn/ > Host: localhost:9812 > Accept: */* > < HTTP/ OK < server: grizzly/ < Content-Type: application/xml < Content-Length: 272 < Date: Fri, 04 Dec :45:47 GMT Connection #0 to host localhost left intact * Closing connection #0 <?xml version="1.0" encoding="UTF-8" standalone="yes"?><uzenets><uzenet><uzenet>hello1</uzenet><date> </date> </uzenet><uzenet><uzenet>hello2</uzenet><date> </date></uzenet><uzenet>< uzenet>hello3</uzenet><date> </date></uzenet></uzenets> ~]$

15 JAX-RS használat, GET (2)
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <uzenets> <uzenet> <uzenet>hello1</uzenet> <date> </date> </uzenet> <uzenet> <uzenet>hello2</uzenet> <date> </date> </uzenet> <uzenet> <uzenet>hello3</uzenet> <date> </date> </uzenet> </uzenets>

16 JAX-RS használat, PUT ~]$ curl -v -X PUT -H 'Content-type: text/plain' -d 'hello3' -L * About to connect() to localhost port * Trying connected * Connected to localhost ( ) port > PUT /uzenetek HTTP/1.1 > User-Agent: curl/ (x86_64-redhat-linux-gnu) libcurl/ OpenSSL/0.9.8b zlib/1.2.3 libidn/ > Host: localhost:9812 > Accept: */* > Content-type: text/plain > Content-Length: 6 > > hello3HTTP/ OK < server: grizzly/ < Content-Length: 0 < Date: Fri, 04 Dec :44:15 GMT * Connection #0 to host localhost left intact * Closing connection #0 ~]$

17 SOAP vs REST SOAP: bevált
Tranzakciókezelés, digitális aláírás, titkosítás, ... Minden HTTP POST (amennyiben HTTP a transzportrétegünk), még az adatlekérés is! XML + SOAP envelope overhead magas REST: “új” (2000-ben találták ki) minden HTTP felett (→ stateless, cachelhető, uniform interfész) egyszerűség a SOAP újra feltalálja a kereket (a HTTP-t...)


Letölteni ppt "Webszervizek (JAX-WS, és JAX-RS) bemutatása"

Hasonló előadás


Google Hirdetések