WS 13/14 ALP 5 - Web-Dienste 1
13 Web-Dienste!
13.1 Prinzipien ! ! !2!13.2 Web-Dienste mit Java ! !6!13.3 WSDL ! ! ! !16!13.4 REST ! ! ! !23!Zusammenfassung ! ! !26 !!
Klaus-Peter Löhr!
WS 13/14 ALP 5 - Web-Dienste 2
13.1 Prinzipien!
Web-Dienste (Web Services):
Ø fernaufrufbare Dienste, vermittelt über Web Server (keine GUI, kein Browser)
Ø Datenformat: SOAP (XML-basiert), JSON oder andere
Ø Schnittstellenbeschreibung: WSDL (XML-basiert)
Ø unabhängig von Programmiersprachen (vgl. DCE/CORBA!)
( à„Dienstorientierte Architektur“, service-oriented architecture - SOA)
WS 13/14 ALP 5 - Web-Dienste 3
Klient K (Sprache X)
Dienst D (Sprache Y)
WSDL für D
SOAP-Bibliothek für X
WSDL für D
SOAP-Bibliothek für Y
Netz
HTTP (oder FTP ...) HTTP (oder FTP ...)
WS 13/14 ALP 5 - Web-Dienste 4
Bereitstellung eines Web-Dienstes (deployment):
Ø in geeignetem Server (Tomcat, GlassFish, MS IIE, ...),
Ø unter identifizierender URL („service endpoint“),
Ø Werkzeuge zur Codegenerierung zusätzlich zum Anwendungscode einsetzen,
Ø Spezifikation veröffentlichen: Schnittstellenbeschreibung (plus Semantik: WSDL-S), z.B. über UDDI (Universal Description, Discovery and Integration)
WS 13/14 ALP 5 - Web-Dienste 5
Benutzung eines Web-Dienstes:
Ø URL in Erfahrung bringen - evtl. über UDDI .
Ø Schnittstelle in Erfahrung bringen, § evtl. über UDDI, § evtl. mit Web Browser,
z.B. http://wuhan.imp.fu-berlin.de:44711/sysprop1?wsdl (VPN!).
Ø Werkzeuge zur Codegenerierung zusätzlich zum Anwendungscode einsetzen.
WS 13/14 ALP 5 - Web-Dienste 6
13.2 Web-Dienste mit Java!
Ø JAX-WS ist die „Java API for XML-based Web Services“
Ø JAX-WS RI ist die zugehörige Reference Implementation
Ø Web Resources Framework (WSRF) für zustandsbehaftete Dienste
Ø Pakete beginnen mit javax: javax.jws Annotationen
!! !javax.jws.soap Annotationen !! !javax.xml.ws Schnittstellen und Klassen ... weitere
WS 13/14 ALP 5 - Web-Dienste 7
Zur Erinnerung: Java-Annotationen
Ø Annotationen sind Zusätze zu normalem Programmtext
Ø Syntax: @identifer [ name-value-list ]
Ø Semantik des umgebenden Codes wird nicht verändert, aber das Verhalten von Werkzeugen wird beeinflusst.
Ø Annotationen mit retention-Eigenschaft werden der übersetzten Klasse als Metadaten beigegeben, die auch mittels Reflexion greifbar sind.
Ø Beispiele: § @override !(keine Metadaten) § @WebService
WS 13/14 ALP 5 - Web-Dienste 8
Beispiel: Dienst Sysprop Dieser Dienst liefert Informationen über seine Umgebung
und teilt mit, wie oft er aufgerufen wurde. package sysprop;! // diverse Annotationstypen (mit retention): import javax.jws.WebService; !!import javax.jws.WebMethod;!import javax.jws.soap.SOAPBinding;!import javax.jws.soap.SOAPBinding.Style;!!@WebService!@SOAPBinding(style = Style.RPC) // Interaktionsstil Fernaufruf public interface Sysprop { // „system property“ @WebMethod String getSysprop(String name);!}!
„Service Endpoint Interface - SEI“
WS 13/14 ALP 5 - Web-Dienste 9
... und hier eine Implementierung: !package sysprop;!!import javax.jws.WebService;!!@WebService(endpointInterface = "sysprop.Sysprop")!
// vollständiger Name des Java interface public class SyspropImpl implements Sysprop {! ! private int n = 0;!public String getSysprop(String name) { ! ! return " " + n++ + " " + ! System.getProperty(name); }!}!
„Service Implementation Bean - SIB“
WS 13/14 ALP 5 - Web-Dienste 10
Bereitstellung (deployment) zu einfachen Testzwecken ohne Web Server in einem separaten Prozess, z.B. auf wuhan: package sysprop;!import javax.xml.ws.Endpoint;! // usage: java sysprop.SyspropPublisher &!public class SyspropPublisher { !public static void main(String[] arg) {! Endpoint.publish(! "http://wuhan.imp.fu-berlin.de:44711/sysprop1", !
! new SyspropImpl() );!! } // keeps running!!
}!
à Dienst wird samt generiertem WSDL-Text bereitgestellt.
WS 13/14 ALP 5 - Web-Dienste 11
Von irgendwoher (VPN!) als Webseite „missbrauchen“:!!$ curl http://wuhan.imp.fu-berlin.de:44711/sysprop1!<html>!<head><title>!Web Services!</title></head>!<body>!<h1>Web Services</h1>!.....!!!!... denn der Aufruf als Web-Dienst erfolgt über POST statt GET.!
mit Browser
WS 13/14 ALP 5 - Web-Dienste 12
package sysprop; ! !// Klient: Benutzung des Dienstes!!import javax.xml.namespace.QName;!import javax.xml.ws.Service;!import java.net.URL;!!class SyspropClient {// usage: java SyspropClient property!public static void main(String arg[ ]) throws Exception {! URL url = new URL(!
! "http://wuhan.imp.fu-berlin.de:44711/sysprop1");! QName qname = new QName("http://sysprop/", !
! ! ! ! "SyspropImplService");! Service service = Service.create(url, qname);! Sysprop proxy = service.getPort(Sysprop.class);! System.out.println(proxy.getSysprop(arg[0])); }!}!
aus WSDL zu entnehmen
WS 13/14 ALP 5 - Web-Dienste 13
... oder auch mit Perl: !!#!/usr/bin/perl!# usage: syspropclient.pl <property>!!use SOAP::Lite;! !my $url ='http://wuhan.imp.fu-berlin.de:44711/sysprop1';!!my $stub = SOAP::Lite->service($url);!
! ! ! ! ! ! ! !print $stub->getSysprop($ARGV[0]), "\n"; ! !!!
WS 13/14 ALP 5 - Web-Dienste 14
... und ein paar Tests: !lounge: java sysprop/SyspropClient os.arch! 0 amd64!lounge: java sysprop/SyspropClient os.name! 1 Linux!lounge: java sysprop/SyspropClient java.version! 2 1.7.0_25!!lounge: syspropclient.pl os.name! 3 Linux!lounge: !
WS 13/14 ALP 5 - Web-Dienste 15
Für komplexere Anwendungen expliziter Einsatz von Werkzeugen: wsgen class
generiert zu einem SEI die für die WSDL-Erzeugung benötigten Hilfsklassen und auf Wunsch auch gleich den WSDL-Text (vgl. CORBA: java2idl )
wsimport wsdl
generiert zu einem WSDL-Text Hilfsklassen zur Benutzung durch Klienten (vgl. CORBA: idl2java )
WS 13/14 ALP 5 - Web-Dienste 16
13.3 WSDL!Web Services Description Language
beschreibt Schnittstelle eines Web-Dienstes mittels XML:
abstrakte Schnittstelle (port type) Schnittstelle unabhängig von Nachrichtenformaten, Beschreibung mit XML Schema
konkrete Schnittstelle (binding)
Abbildung der abstrakten Schnittstelle auf unterstützte Nachrichtenformate
WS 13/14 ALP 5 - Web-Dienste 17
Dienstbeschreibung
abstrakte Schnittstelle
Operation Anfrage Antwort
konkrete Schnittstelle
Operation SOAP-Anfrage SOAP-Antwort
Web-Adressen (end points)
WS 13/14 ALP 5 - Web-Dienste 18
<?xml version="1.0" encoding="UTF-8"?>!<!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. -->!<!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. -->!<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" ! xmlns:tns="http://sysprop/" ! xmlns:xsd="http://www.w3.org/2001/XMLSchema" ! xmlns="http://schemas.xmlsoap.org/wsdl/" ! targetNamespace="http://sysprop/"! name="SyspropImplService" > !!<types></types> ! ! ! ! ! !<message name="getSysprop">! <part name="arg0" type="xsd:string"></part>!</message>!<message name="getSyspropResponse">! <part name="return" type="xsd:string"></part>!</message>!<portType name="Sysprop">! <operation name="getSysprop">! <input message="tns:getSysprop"></input>! <output message="tns:getSyspropResponse"></output>! </operation>!</portType>!<binding .......!
Schnitt- stelle
WS 13/14 ALP 5 - Web-Dienste 19
<binding name="SyspropImplPortBinding" type="tns:Sysprop">!<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="rpc">!</soap:binding>! <operation name="getSysprop">! <soap:operation soapAction=""></soap:operation>! <input><soap:body use="literal" namespace="http://sysprop/">! </soap:body>! </input>! <output><soap:body use="literal" namespace="http://sysprop/">! </soap:body>! </output>! </operation>!</binding>!<service name="SyspropImplService">! <port name="SyspropImplPort" binding="tns:SyspropImplPortBinding">! <soap:address location="http://wuhan.imp.fu-berlin.de:44711/sysprop1">! </soap:address>! </port>!</service>!</definitions>!
SOAP
URL Service Endpoint
WS 13/14 ALP 5 - Web-Dienste 20
Charakterisierung von Web-Diensten über SOAP:
Ø Dienst/Ressource kann zustandsbehaftet sein
Ø Identifikation mittels URL
Ø Funktionalität ähnlich wie bei Fernaufrufen
Ø Aufruf stets per HTTP-Anfrage POST Ø Operation/Parameter werden innerhalb der
POST-Anfrage/Antwort-Daten mit SOAP codiert
WS 13/14 ALP 5 - Web-Dienste 21
Das Entsprechende in CORBA IDL:
module sysprop {!!interface Sysprop {!! ! string getSysprop(in string name);!! ! };!
}; Dies entspricht den Informationen in den WSDL-Abschnitten <message> und <portType> . Die übrigen Angaben gehören nicht zur abstrakten Schnittstelle: <binding> bindet die Realisierung an das SOAP-Protokoll. <service> legt die URL des Dienstes fest.
WS 13/14 ALP 5 - Web-Dienste 22
Web-Dienste vs. DCE/CORBA
Ø Ähnlichkeiten: § keine Übertragung von Code § asynchrone Nachrichten (oneway)
Ø Web-Dienste haben Nachteile gegenüber CORBA:
§ schwerfälliger Apparat § keine echten Callbacks (nur in Verbindung mit Asynchronie)
Ø Web-Dienste haben Vorteile gegenüber CORBA:
§ Stabilität § allgemeine Akzeptanz
Empfohlene Lektüre: M. Henning: The Rise and Fall of CORBA.
WS 13/14 ALP 5 - Web-Dienste 23
13.4 REST!(„representational state transfer“)
Ø Rückbesinnung auf die bei HTTP intendierte Semantik von GET, PUT, POST, DELETE, .....
Ø Gegenstand eines Web-Dienstes ist eine gewisse Menge von
Ressourcen unterschiedlicher Typen Ø GET, PUT, ... als Standard-Operationen auf diesen Ressourcen
Ø Parameter sind die Anfrage/Antwort-Daten der HTTP-Anfragen
Ú RESTful Web Services (ohne SOAP)
WS 13/14 ALP 5 - Web-Dienste 24
GET (readonly)
PUT (idempotent) POST DELETE
(idempotent)
Collection URI www.travel.com/booking
Elemente von „booking “ auflisten
Collection „booking “ ersetzen oder erzeugen
Neues Element erzeugen samt geeigneter URI und diese ausliefern
Collection „booking “ löschen
Element URI www.travel.com/booking /FT35ZBQ
Inhalt des Elements „FT35ZBQ“ ausliefern
Element „FT35ZBQ“ ersetzen oder erzeugen
Element „FT35ZBQ“ löschen
FT35ZBQ ist Datei oder Datenbankeintrag oder .....
WS 13/14 ALP 5 - Web-Dienste 25
Java-RS mit diversen Laufzeit-Annotationen:
@Path("sysprop") !public class SysProp {! private int n = 0; // ohne Effekt – kein Zustand! @GET!@Produces("text/html")!public String getAuthor() {! return "<html><h3>made by Pete</h3><html>"; }!@POST !@Consumes("text/plain") ! // MIME type !@Produces("text/plain")!public String getSysprop(String name) {! return " " + n++ + " " + ! System.getProperty(name); } !}!
!Netbeans erlaubt einfaches Testen mit automatisch generiertem Klienten.
WS 13/14 ALP 5 - Web-Dienste 26
Zusammenfassung!Ø Web-Dienste = „DCE-Prinzip mit Web-Technologie“
Ø WSDL = Pendant zu DCE/CORBA IDL, formuliert in XML
Ø SOAP = HTTP-unabhängiges, XML-basiertes Format für Fernaufrufe und Antworten (auch andere Formate sind populär, z.B. JSON), Dienst mit Zustand (WSRF)
Ø REST = HTTP-basiertes , XML-basiertes Format, SOAP-unabhängig, zustandsloser Dienst
Ø Entwicklungsunterstützung: diverse Frameworks für unterschiedliche Programmiersprachen.
WS 13/14 ALP 5 - Web-Dienste 27
Quellen!
M. Kalin: Java Web Services. O‘Reilly 2009 Oracle: Java EE 6 Web Services
docs.oracle.com/javaee/6/tutorial/doc/bnayk.html W. Iverson: Real-World Web Services. O‘Reilly 2004 Microsoft: Windows Communication Foundation
msdn.microsoft.com/en-us/library/dd456779.aspx P. Cibraro et al.: Professional WCF 4. Wiley 2010 M. Henning: The Rise and Fall of CORBA. Comm. of the ACM 51.8,
August 2008, pp. 53-57 cacm.acm.org/magazines/2008/8/5336-the-rise-and-fall-of-corba/fulltext
Top Related