Gliederung Einführung Definition Web Service ➢ Drei Schhichtenmodell ➢ Architectural Model ➢ System Model ➢ Web Service Standards ➢ SOAP ➢ WSDL ➢ UDDI Types of Web Services ➢ Programmatic Web Services ➢ Interactive Web Services Entwickeln eigener Web Services ➢ Publizieren und Finden von Web Services über UDDI ➢ Erstellung eines kleinen Web Services mit Hilfe von Java Definition Web Service Web Services sind in sich geschlossene Einheiten, die auf Wunsch Dienste durch wohl definierte Schnittstellen zur Verfügung stellen. Das Dreischichtenmodell System Model Einheitliche Schnittstelle ● SOAP Architectural Model SOAP (Simple Object Access Protocol) - Encodierung von beliebigen Daten (Normalerweise in XML) - Programmiersprachen-unabhängige Version von RPC - Funktionsparameter werden kodiert ➔Web Service geschickt - Ermöglicht Verbindungsnachfragen Request: <?xml version='1.0' encoding='UTF-8'> <SOAP-ENV:Envelope xmlns:ns:SOAP-ENV=“http://schemas.xmlsoap. org/soap/envelope/“ xmlns:xsi =“http://www.w3.org/2001/XMLSchemainstance“ xmlns:xsd =“http://www.w3.org/2001/XMLSchema“> <SOAP-ENV:Body> <ns1:searchHandy xmlns:ns1=“http://localhost:8080/Handysuche“ SOAP-ENV:encoding Style=“http://schemas.xmlsoap. org/soap/encoding/“> <marke xsi:type=“xsd:string“>Nokia</marke> <modell xsi:type=“xsd:string“>6310</modell> </ns1:searchHandy> </SOAP-ENV:Body> </SOAP-ENV:Envelope> WSDL (Web Services Description Language) - Programmiersprachen-unabhängige XML-Version einer IDL - Beschreibt die Operationen, welche Web Services ausführen WSDL erlaubt • Programmiersprachen-spezifischen Code zu erzeugen • Methode in der Programmiersprache seiner Wahl aufrufen ➔ WSDL übersetzt in SOAP-basierte Aufrufe WSDL Example: Types <definitions name="StockQuote" targetNamespace="http://example.com/stockquote.wsdl" xmlns:tns="http://example.com/stockquote.wsdl" xmlns:xsd1="http://example.com/stockquote.xsd" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns="http://schemas.xmlsoap.org/wsdl/”> <types> <schema targetNamespace="http://example.com/stockquote.xsd" xmlns="http://www.w3.org/2000/10/XMLSchema"> <element name="TradePriceRequest"> <complexType> <all> <element name=”tickerSymbol" type="string"/> </all> </complexType> </element> <element name="TradePrice"> <complexType> <all> <element name="price" type="float"/> </all> </complexType> </element> </schema> </types> UDDI (Universal Description Discovery and Integration) ➔ Globale Verzeichnisstruktur ✗ Weiße Seiten Namensregister ✗ Gelbe Seiten Branchenverzeichnis ✗ Grüne Seiten Informationen über die Geschäftsmodelle <find_business generic="2.0" xmlns="urn:uddiorg: api_v2" > <findQualifiers> <findQualifier>caseSensitiveMatch</findQualifier> <findQualifier>sortByNameAsc</findQualifier> </findQualifiers> <name>Siemens%</name> </find_business> Muster für Anfragen: 1.Browse •<find_xxx>-Aufrufe •Suche nach einer bestimmten Informationen •Liefert meist eine Liste mit Resultaten zurück •Beispiel: <find_business> 2.Drill-down •<get_xxx>-Aufrufe •Details zu einem Element, vor allem Attribute/Members •Liefert einen konkreten Wert, meist als Struktur, zurück •Beispiel: <get_businessDetail> 3.Invocation •<get_bindingDetail>-Aufrufe •Ein Client speichert die Ortsangaben über einen Web Service lokal •Schlägt er Aufruf eines eigentlich bekannten Web Service fehl, müssen diese Angaben neu aus der UDDI-Registry geholt werden •Dabei wird der ursprünglich mal ermittelte bindingKey als Argument übergeben Programmatic Web Services (PWS) PWS - Funktionsaufrufe in C++, C#, VB oder Java ➢ „single-step“ oder atomare Operationen Beispiel: Inventurprogramm Interactive Web Services (IWS) - „multi-step“ Webapplikationen - Basierend auf Datenbanken und Applikationsserver Beispiel: digitale Bibliothek Erstellung eines kleinen Web Services mit Hilfe von Java Beispiel: „Hello World“ mit GLUE import electric.registry.Registry; import electric.server.http.HTTP; public class HelloWorldService { /** Service function */ public String getHelloWorldMessage (String YourName) { return "Hello World and "+YourName+"!"; } /** Start Web service */ public static void main(String[] argl) throws Exception { HTTP.startup("http://localhost:8004/glue"); Registry.publish("urn:helloworld",new HelloWorldService()); } } Erstellung eines kleinen Web Services mit Hilfe von Java ● HTTP.startup("http://localhost:8004/glue") ; Der GLUE Web Server wird gestartet • Registry.publish("urn:helloworld",new HelloWorldService()); eine Instanz der HelloWorldService-Klasse wird publiziert ➔ URL „urn:helloworld“ GLUE analysiert nun unser publiziertes Java-Objekt ➢ public deklarierten Methoden => SOAP-Methoden Test: ✔ GLUE-Console ruft via SOAP die getHelloWorldMessage-Methode Finden von Web Services über UDDI Durchsuchung aller UDDI-Serviceregistrierungen („TModels“) IUDDI uddi = new UDDIClient(inquireURL); TmodelInfos tModelInfos = uddi.findTModels(„helloworld service“, null); Mit Hilfe des TModel-Keys wird das Tmodel geholt: String tModelKey = tModelInfos.list[0].getTModelKey(); Tmodel tModel = uddi.getTModel(tModelKey); Mittels des TModels sucht man den erstbesten Anbieter des Dienstes: String[] tModelKeys = new String[]{tModelKey}; BusinessInfos businessInfos = uddi.findBusiness(tModelKeys,null); BusinessInfo businessInfo = businessInfos.list[0]; Finden von Web Services über UDDI Die erste Instanz des Dienstes wird geholt ServiceInfos serviceInfos = uddi.findServices(businessInfo.getBusinessKey(),tModelKeys,null); String serviceKey = serviceInfos.list[0].getServiceKey(); Service service = uddi.getService(serviceKey); Adresse und WSDL-Definition der Web Service Schnittstelle: Binding binding = service.getBindings()[0]; String address = binding.getAccessPoint().getAddress(); String wsdlURL = tModel.getOverview().getOverviewURL(); GLUE-Kontext wird erzeugt und mit Registry.bind() der Web Service angezeigt Context context = new Context() context.setProperty(„endpoint“,address); IHelloWorldService helloworld = (IhelloWorldService)Registry.bind( wsdlURL,IHelloWorldService.class,context); System.out.println(helloworld.getHelloWorldMessage(„test“); Publizieren von Web Services über UDDI Ein Objekt zur registration in einem UDDI wird erstellt Public class UDDIPublish1 { public static void main( String[] args ) throws Exception { String inquireURL = "http://localhost:8004/glue/inquire/uddi"; String publishURL = "http://localhost:8005/glue/publish/uddi"; String user = "santa"; String password = "christmas"; Ein Clientund ein Business Objekt wird erzeugt IUDDI uddi = new UDDIClient( inquireURL, publishURL, user, password ); Business business = new Business( "Presents, Inc." ); [...] Addresse wird vervollständigt und anschließend in einem UDDI registriert. // Publish the Business to the UDDI server. Business savedBusiness = uddi.saveBusiness( business ); System.out.println( "\nsaved\n" + savedBusiness ); } } Fazit In Web Services steckt ein großes Potential bezüglich der Business-to-Business-Kommunikation. Web Services sind die Zukunft, die nächste Generation von Software. Die Architektur ist ein Guideline, um in der Vielfalt der inzwischen zu vielen XML Standards, Technologien und Zukunftsperspektiven die Orientierung nicht zu verlieren.