Hochschule Bonn-Rhein-Sieg Service-Orientierte Architekturen Kapitel 4: Web Services I Vorlesung im Masterstudiengang Informatik Sommersemester 2010 Prof. Dr. Sascha Alda (sascha.alda@h-brs.de)
(Vorläufiger) Aufbau der Vorlesung Kapitel Thema 1 Organisation, Einführung in Software-Architekturen 2 Einführung in Service-Orientierte Architekturen 3 Design Prinzipien von Service-Orientierten Architekturen 4 (11.5.) Web Services I (SOAP, WSDL) 5 (18.5.) Web Services II (Axis2,...) 6 (25.5.) Modellierung von Geschäftsprozessen (BPEL, BPMN) 7 (1.6.) Vertiefung und Backup Web Services 8 (8.6.) OSGi Service Plattform 9 (15.6.) Einführung in Swordfish 10 REST Architekturen 11 (22.6.) Exception Handling in SOA (Gastvortrag) 12 (29.6.) SOA Point of View von Accenture (Gastvortrag) Folie 2
Ziele dieser Unterrichtseinheit Grundlagen des Web Services Framework verstehen Die beiden wichtigsten Web Services Standards verstehen und anwenden (SOAP und WSDL) Implementierungen eines Web Service basierend auf gängigen Technologien verstehen und eigenständig anwenden können Folie 3
Aufbau dieser Veranstaltung Kapitel 4: Einführung in Web Services, Teil 1 1 Überblick über Web Services 2 Einführung in SOAP 3 Einführung in WSDL 4 Implementierung von Web Services: AXIS2 und 5 Zusammenfassung und Ausblick Folie 4
Web Services Technologie-Framework für die Entwicklung und Integration von verteilten Systemen Seit ca. 2000 bekannt Festlegung der Standards durch Web Service Interoperability Organization (WS-I) Aktueller Standard: Basic Profile (BP) 1.1 Draft Version: Basic Profile (BP) 1.2 Getrieben durch IBM, Microsoft, Bea, Fujitsu, Oracle u.a. Web Services repräsentieren eine Möglichkeit zur Implementierung einer SOA Stand heute: De-Facto Framework für die Implementierung Folie 5
Aufbau einer SOAP-basierten Web Services Architektur Return possibleservices : WSDL[ ] UDDI (-compatible) Directory Discover aservice SOAP SOAP Publish aservice : WSDL Service Consumer SOAP Service Bind / Interaction Web Service Provider Web Service aservice : WSDL SOAP XML-basiertes Nachrichtenformat für den Aufruf / Interaktion mit einem Web Service WSDL (Web Service Description Language) XML-basierte Meta-Sprache zur Beschreibung der Schnittstelle eines Web Service UDDI (Universal Description, Discovery and Integration) Directory-Service für die Publikation und Suche von Web Services
XML Basis für Web Services Architekturen XML (extensible Markup Language) ist die Grundlage einer Vielzahl der Web Services Standards. Metasprache zur Definition von (Austausch-)Dokumenten Hohe Interoperabilität (plattform- und programmiersprachenneutral) Hierarchische Dokument-Struktur lesbare Darstellung Typirisierung von Dokument-Elementen und Attribute durch Namensräume XML-Typ Deklaration f. Zeichensatz <?xml version = 1.0 encoding = UTF-8?> <database xmlns = http://myweb.de/types > <person> <vorname>sascha</vorname> <nachname>alda</nachname> </person> </database> Hierarchische Struktur eines XML-Dokuments Deklaration des Namensraums Type-System für Typ-Definition (XML-Schema) <?xml version = 1.0 encoding = UTF-8?> <schema xmlns = http://www.w3.org/2001/xmlschema xmlns : myschema = http://myweb.de/types targetnamespace = http://myweb.de/types <element name person type = myschema:persontype /> <complextype name = PersonType > <sequence> <element name = vorname type = string /> <element name = nachname type = string /> </sequence> </complextype> </schema>
XML Basis für Web Services Architekturen XML (extensible Markup Language) ist die Grundlage einer Vielzahl der Web Services Standards. Metasprache zur Definition von (Austausch-)Dokumenten Hohe Interoperabilität (plattform- und programmiersprachenneutral) Hierarchische Dokument-Struktur lesbare Darstellung Typirisierung von Dokument-Elementen und Attribute durch Namensräume XML-Typ Deklaration Hierarchische Struktur f. Zeichensatz eines XML-Dokuments (mit Präfix f. Namensraum) <?xml version = 1.0 encoding = UTF-8?> <database xmlns:d= http://myweb.de/types > <d:person> <d:vorname>sascha</vorname> <d:nachname>alda</nachname> </d:person> <database> Deklaration des Namensraums Type-System für Typ-Definition (XML-Schema) <?xml version = 1.0 encoding = UTF-8?> <schema xmlns = http://www.w3.org/2001/xmlschema xmlns : myschema = http://myweb.de/types targetnamespace = http://myweb.de/types <element name person type = myschema:persontype /> <complextype name = PersonType > <sequence> <element name = vorname type = string /> <element name = nachname type = string /> </sequence> </complextype> </schema>
Aufbau dieser Veranstaltung Kapitel 4: Einführung in Web Services, Teil 1 1 Überblick über Web Services 2 Einführung in SOAP 3 Einführung in WSDL 4 Implementierung von Web Services: AXIS2 und 5 Zusammenfassung und Ausblick Folie 9
SOAP XML-basiertes Nachrichtenformat für den Aufruf / Interaktion mit einem Web Service Die Bezeichnung Protokoll ist bedingt richtig: SOAP basiert auf bekannten Protokollen wie HTTP, TCP usw. Versionen: SOAP 1.1 (http://www.w3.org/tr/2000/note-soap-20000508/) SOAP 1.2 (http://www.w3.org/tr/soap12-part1/), seit 2007 SOAP 1.2 ist abwärtskompatibel zu 1.1 SOAP 1.1 ist (noch) weiter verbreitet als 1.2 Ursprüngliche Bezeichnung in 1.1: Simple Object Access Protocol Ab 1.2: keine Bedeutung! SOAP spezifiziert keine Objekte SOAP legt kein Protokoll fest SOAP sieht zwei grundlegende Nachrichtenformate vor: Methodenbasiert, RPC-Style (RPC / literal) Dokumentbasiert (document / literal) Folie 10
SOAP Struktur und Beispielcode SOAP ist ein Nachrichtenformat für die Interaktion mit Web Services XML-basiertes Nachrichten-Format XML-Fragmente werden verschickt SOAP-Nachrichten haben einen hierarchischen Aufbau Service-Aufruf Service Consumer Rückantwort -optional- SOAP- Nachricht Web Service Provider Web Service aservice : WSDL Envelope Header Übertragungsspezifische Daten -required- Body Anwendungsspezifische Daten Hierarchischer Aufbau (Meta-Modell) <?xml version="1.0"?> <s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:header> </s:header> <s:body> </s:body> </s:envelope> XML-Struktur
SOAP RPC-Style SOAP Request Der RPC-Style von SOAP impliziert, dass das ausgetauschte XML-Fragment auf einem Operationsaufruf sowie auf eine entsprechende Rückantwort basiert Service-Aufruf Service Consumer Rückantwort -optional- SOAP- Nachricht Web Service Provider Web Service aservice : WSDL Envelope Header Übertragungsspezifische Daten -required- Body Anwendungsspezifische Daten Meta-Modell Operation definiert in WSDL file <?xml version="1.0"?> <s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:header> </s:header> <s:body> <m:getaddress xmlns:m="http://www.myserver.de/soap"> <m:surname> Alda </m:surname> <m:/getaddress> </s:body> </s:envelope> XML-Struktur (SOAP Request für Service-Aufruf, RPC-Style)
SOAP RPC-Style SOAP Response Der RPC-Style von SOAP impliziert, dass das ausgetauschte XML-Fragment auf einem Operationsaufruf sowie auf eine entsprechende Rückantwort basiert Service-Aufruf Service Consumer Rückantwort -optional- SOAP- Nachricht Web Service Provider Web Service aservice : WSDL Envelope Header Übertragungsspezifische Daten -required- Body Anwendungsspezifische Daten Meta-Modell Rückgabewert definiert in WSDL file <?xml version="1.0"?> <s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:header> </s:header> <s:body> <m:getaddressresponse xmlns:m="http://www.myserver.de/soap"> <m:city> Bonn, NRW </city> </m:getaddressresponse> </s:body> </s:envelope> XML-Struktur (SOAP Response für Service-Aufruf, RPC-Style)
SOAP RPC-Style SOAP Fault Der RPC-Style von SOAP impliziert, dass das ausgetauschte XML-Fragment auf einem Operationsaufruf sowie auf eine entsprechende Rückantwort basiert Service-Aufruf Service Consumer Fehler! -optional- SOAP- Nachricht Web Service Provider Web Service aservice : WSDL Envelope Header Übertragungsspezifische Daten -required- Body Anwendungsspezifische Daten Meta-Modell <?xml version="1.0"?> <s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:body> <s:fault> <s:reason> <s:text> Invalild Method </s:text> </s:reason> <s:detail> <! ggf. Eigene Daten mit eigenem Namespace -> </s:detail> </s:fault> </s:body> </s:envelope> XML-Struktur (SOAP Response für Fehlermeldung)
SOAP Document-Style Der Document-Style von SOAP impliziert, dass das ausgetauschte XML- Fragment ein Dokument ist und nicht auf einem Methodenaufruf basiert. Nur One-Way Kommunikation Service Consumer Service-Aufruf SOAP- Nachricht Web Service Provider Web Service aservice : WSDL Envelope Header Übertragungsspezifische Daten -required- -optional- Body Anwendungsspezifische Daten Meta-Modell Operation definiert in WSDL file <?xml version="1.0"?> <s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:header> </s:header> <s:body> <p:person xmlns:p="http://www.myserver.de/soap"> <p:surname> Alda </p:surname> </p:person> </s:body> </s:envelope> XML-Struktur (SOAP Document, Document-Style)
Verarbeitungsmodell bei SOAP Eine SOAP-Nachricht kann über mehrer Zwischenknoten (Intermediaries) geleitet werden Intermediaries können in den Verarbeitungsprozess einer SOAP-Nachricht eingreifen Intermediaries sollten nur auf SOAP-Header zugreifen Service Client SOAP Request Intermediary A SOAP Request Intermediary B SOAP Request Service Provider (ultimate SOAP receiver) SOAP Response Intermediary B SOAP Response Intermediary Folie 16
Aufbau einer SOAP-basierten Architektur mit HTTP POST web/my HTTP/1.1 Host myserver.com Content-Type: application/ soap+xml SOAP Envelope. <<entity>> Person getaddress() Client Host <<Service Consumer>> HTTP <<WebService>> ERPService Application Server Web Service ERPService : WSDL <<entity>> Address getcity() SOAP verwendet bekannte Web-Protokolle zur Übertragung von SOAP-Nachrichten Standard ist HTTP: Verwendung der POST-Methode Alternative: SMTP, TCP / IP Web Service übernimmt Dispatcher Rolle <<control>> Process Relocation performrelocation()
Aufbau dieser Veranstaltung Kapitel 4: Einführung in Web Services, Teil 1 1 Überblick über Web Services 2 Einführung in SOAP 3 Einführung in WSDL 4 Implementierung von Web Services: AXIS2 und 5 Zusammenfassung und Ausblick Folie 18
Überblick zu WSDL Die Web Service Description Language (WSDL) ist ein XML-Format, um die Schnittstelle eines Web Services zu beschreiben Interface Definition Language (IDL) Abbildung auf gängige Programmiersprachen möglich Abstrakte Beschreibung von Operationen und deren Parametern (Nachrichten) Anbindung an ein bestimmtes Netzwerk-Protokoll für den Zugriff auf einen Web Service Standard: SOAP über HTTP Spezifikation des Endpunktes (Endpoints) um auf einen speziellen Web Services zugreifen zu können Zwei Standards: WSDL 1.1 (aktueller Standard) WSDL 2.0 (in vielen Server-Implementierungen bereits übernommen) Folie 19
WSDL Grundlegende Struktur abstrakt port-type operation b operation a inmessage outmessage binding (SOAP over HTTP) binding (SOAP over SMTP) konkret port service port Meta-Modell
Aufbau einer WSDL-Beschreibung Datentypen (types) Beschreibung der Datentypen der Nachrichten, die für den Aufruf eines Web Service verwendet werden Nur komplexe Datentypen müssen definiert werden, einfache Datentypen wie integer, float, double oder string sind bereits durch das grundlegende XML- Schema vorgegeben Wiederverwendung von externen Schemata (import-befehl) Nachrichten (message) Beschreibung der Nachrichten, die zwischen Client und Web Service beim Aufruf einer Operation ausgetauscht werden Eine Nachricht kann mehrere Teile haben, wobei jeder Teil einem Datentyp zugeordnet ist Schnittstellen (porttype) In einer Schnittstellen werden eine Reihe von Operationen zusammengefasst Jede Operation ist definiert auf Basis der zuvor definierten Nachrichten und Datentypen Folie 21
Aufbau einer WSDL-Beschreibung Protokoll (binding) Festlegung, wie mit der abstrakten Schnittstelle des Web Service kommuniziert werden kann Angabe des Kommunikationsformat (z.b. SOAP-Nachrichten) und das Transportprotokoll (z.b. HTTP) Kommunikationsendpunkt (port) Ein einzelner Service-Endpunkt für eine Kommunikation durch die Angabe einer Adresse (z.b. eine URL) für eines der zuvor definierten Bindings. Service (service) Zusammenfassung einer Menge von einzelnen Endpunkten (ports) unter einem logischen Namen Mehre Ports können auf den gleichen PortType verweisen, jeweils mit anderen Binding-Alternativen Folie 22
XML-basierter Aufbau einer WSDL-Beschreibung <?xml version= 1.0 > <definitions name = StockQuote > <types> </types> <schema>... </schema> <message name = PriceInput >... </message> <porttype name = StockQuotePortType > <operation name = GetLastTradePrice >... <operation> </porttype> <binding name = StockQuoteSoapBinding >... </binding> <service name = StockQuoteService> <port name = StockQuotePort >... </port> <service> <definitions> Folie 23
WSDL Struktur und Beispielcode abstrakt konkret binding (SOAP over HTTP) port port-type operation b operation a inmessage outmessage service Meta-Modell binding (SOAP over SMTP) port <message name= PersonData"> <part name= surname" type="xsd:string"/> </message> <message name= AddressData"> <part name= city" type="xsd:string"/> </message> <porttype name= ERPManager"> <operation name= GetAddress"> <input message= PersonData "/> <output message= AddressData"/> </operation> </porttype> <s:body> <GetAddress> <surname> Alda </surname> </GetAddress> </s:body> WSDL Dokument (Ausschnitt) SOAP Request (RPC-Style)
Muster für den Nachrichtenaustausch WSDL unterstützt vier verschiedene Muster zum Nachrichtenaustausch (Message Exchange Pattern, MEP) One-way Client Web Service <input> Request- Response Client Web Service <input> <output> Solicit- Response Client Web Service <output> <input> Notification Client Web Service <output> Folie 25
WSDL Binding an Netzwerkprotokoll und Nachrichtenformat <binding name= AdressBinding type = ERPManager > <soap:binding style = rpc // Nachrichtenformat SOAP/rpc. Alternative: document transport = http://schemas.xmlsoap.org/soap/http /> // HTTP als Protokoll <operation name= GetAddress"> <soap:operation soapaction = GetAddress > <input> <soap:body parts= GetAddressRequest... > </input> <output> <soap:body parts= GetAddressResponse... > </output> </operation>... </binding> WSDL-Dokument (Ausschnitt) zur Definition von Bindings
WSDL Definition des Ports <service name = ERPService > <port name = ERPService_http binding = AdressBinding > <soap: address location= http://myserver.com/axis2/services/erpservice /> </port>... </service> WSDL-Dokument (Ausschnitt) zur Definition eines Service Zu jedem Binding wird ein Port definiert Ein Binding kann das gleiche PortType (Schnittstelle) mehrfach binden mit unterschiedlichen Protokollen / Formaten Aus der Adresse des Service und aus SOAPAction (siehe Binding) wird der betreffende HTTP_Request erstellt
Binding - SOAP over HTTP SOAP kann HTTP zur Übertragung von SOAP-Nachrichten verwenden Standard-Binding, da transparente Übertragung über Port 80 Ausschließliche Verwendung der POST-Methode des HTTP Protokolls Übernahme der Adress-Daten aus WSDL POST /axis2/services/erpservice HTTP 1.1 Host myserver.com Content-Type: application/soap+xml SOAPAction: urn:getaddress <s:envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:header> </s:header> <s:body> <GetAddress xmlns:m="http://www.myserver.de/soap"> <m:nachname> Alda </m:nachname> </m:getaddress> </s:body> </s:envelope> HTTP Header HTTP entity-body = SOAP Nachricht HTTP-Request inkl. SOAP Nachricht
Software Bibliotheken für SOAP Eine Vielzahl von Software Bibliotheken für die Entwicklung einer SOAPbasierten Web Services Architektur stehen zur Verfügung Unterstütze Programmiersprachen: Java, Python, PHP, C, C++ Open Source Software Bibliotheken in Java: Gängige Frameworks: Apache Axis2, Apache CXF Sun Java Web Services Developer Pack (JWSDP) Name Java API for XML Web Services (JAXWS) Java Architecture for XML Binding (JAXB) SOAP with Attachments API for Java (SAAJ) Java Web Services Metadata (JSR 181) Package javax.xml.ws javax.xml.bind javax.xml.soap javax.jws Download für J2SE 1.4.2 sowie J2SE 5.0 verfügbar Ab Java SE 6 standardmäßig integriert 29
Code-Demo: Verwendung des JWSDP (1/2) Implementierung des Service und des Server package com.bonn.erp; import javax.jws.webmethod; import javax.jws.webservice; import javax.jws.soap.soapbinding; import javax.jws.soap.soapbinding.style; @WebService @SOAPBinding(style=Style.RPC) public class ERPManager { @WebMethod public String getaddress( String NachName ){ String Address = AdressStore.getAddress( NachName ); return Address; } } Java Code Web Service package com.bonn.erp; import javax.xml.ws.endpoint; public class MyAppServer { public static void main(string[] args) { ERPManager server = new ERPManager(); Endpoint endpoint = Endpoint.publish("http://localhost:8080/ services", server); System.out.println("Server is started"); } } Java Code Application Server Coding Compile javac *.java Run Server java MyAppServer Generate Stubs for Client wsimport -keep http://localhost:8080/ erpmanager?wsdl ERPManager.class ERPManagerService.class
Code-Demo: Verwendung des JWSDP (2/2) Implementierung des Client package com.client; import com.bonn.erp.erpmanager; import com.bonn.erp.erpmanagerservice; Import der zuvor erzeugten Klassen public class MyClient { public static void main(string args[]) { // Initialisierung Web Service mit generierten Klassen ERPManagerService service = new ERPManagerService(); ERPManager manager = service.geterpmanagerport(); } } // Verwendung des Web Service String adresse = manager.getaddress( "Alda" ); System.out.println("Adresse von Hr. Alda: " + adresse); Java Code Client Import Stubs Compile javac *.java Run Client java MyClient ERPManager.class ERPManagerService.class
(Vorläufiger) Aufbau der Vorlesung Kapitel Thema 1 Organisation, Einführung in Software-Architekturen 2 Einführung in Service-Orientierte Architekturen 3 Design Prinzipien von Service-Orientierten Architekturen 4 (11.5.) Web Services I (SOAP, WSDL) 5 (18.5.) Web Services II (Axis2,...) 6 (25.5.) Modellierung von Geschäftsprozessen (BPEL, BPMN) 7 (1.6.) Vertiefung und Backup Web Services 8 (8.6.) OSGi Service Plattform 9 (15.6.) Einführung in Swordfish 10 REST Architekturen 11 (22.6.) Exception Handling in SOA (Gastvortrag) 12 (29.6.) SOA Point of View von Accenture (Gastvortrag) Folie 32
Zeitplan der Team-Präsentationen Kapitel Thema 8.6. Vortrag 1: (Team ) Vortrag 2: (Team ) 15.6. Vortrag 3: (Team ) Vortrag 4: (Team ) Vortrag 5: (Team ) 22.6. Vortrag 6: (Team ) Vortrag 7: (Team ) 29.6. Vortrag 8: (Team ) Vortrag 9: (Team ) Folie 33
Überblick Team-Präsentationen Team Fanta5 Temporär Blau Gummibärenbande ichweissnicht Jajowada Mars Massup Sprint Temporär Thema Finanzbuchhaltung in einem ERP-System Persistente Speicherung von Daten Verarbeitung elektronischer Rechnungen Zukunftsweisende Hardware-Struktur Software für Digitale Signatur Bearbeitung von KPI Portal-Integration Scannen und Integration von Dokumenten Zugriff auf LDAP-Verzeichnis Persistente Speicherung von Daten Folie 34