Konzeption und Implementierung einer XML-RPC und SOAP Anbindung Praktikumsbericht von Martin Spindler
Gliederung 1.Einleitung - SKYRIX Software AG - Die SKYRiX Groupware - Motivation 2.XML-RPC - Spezifikation - XML-RPC Anbindung an Objective-C 3.SOAP: Kurzer Überblick 4.Ausblick und weiterführende Arbeiten 5.Zusammenfassung
MDlink GmbH Nov. 2000: SKYRIX Software AG ca. 17 Mitarbeiter davon ein Drittel Studenten Produkt: SKYRiX Groupware 1. Einleitung: SKYRIX Software AG
1. Einleitung: SKYRiX Groupware
1. Einleitung: Motivation I Unterstützung von Skriptsprachen Automatisieren von Operationen Unterstützung von Hochsprachen native Clients Nutzen fremder Services Standardisierte Schnittstellen:
1. Einleitung: SKYRiX – Struktur Schichten verschiedene Abstraktionsstufen gutes Software Design unabhängige Libraries Trennung von UI und Model
1. Einleitung: SKYRiX – Struktur SchichtenProzesse
1.Einleitung: Motivation II Verteilte Prozesse Stabilität Skalierbarkeit Performance steigt
1. Einleitung: RPC RPC Remote Procedure Call Aufruf von Funktionen auf entfernten Rechnern Funktion = Name + Parameter + Resultat
2. XML-RPC RPC über XML und HTTP Unterstützt von vielen Programmiersprachen Spezifikation:
2. XML-RPC: Struktur Call: add(3,5) add Response: 8
2. XML-RPC: Datentypen oder 4 Byte Integer -42 Wahr oder Falsch 1 ASCII String Hello World Fließkommazahl Datum / Zeit T14:08:55 Binäre Daten eW9lYWQgdGhpcyE= 3... person_id 3... Skalare Typen: Komplexe Typen:
2. XML-RPC: Objective-C Haussprache von SKYRiX Objektorientiert (SMALLTALK für C) Dynamisch bindende und typisierende Sprache Beliebige Klassen können während Laufzeit instanziert werden Syntax: [object messageWith:paramter1 and:parameter2]
2. XML-RPC: Aufbau von libXmlRpc Klassen: XmlRpcMethodCall XmlRpcMethodResponse XmlRpcSaxHandler XmlRpcDecoder XmlRpcEncoder
2. XML-RPC: MethodCall und -Response XmlRpcMethodCallXmlRpcMethodResponse -initWithName:parameters: -initWithXmlRpcString: -paramters -methodName -xmlRpcString -initWithResult: -initWithXmlRpcString: -result -xmlRpcString
2. XML-RPC: XmlRpcEncoder XmlRpcMethodCall bzw. XmlRpcMethodResponse XML Dokumente Beispiel: Person-Klasse mit verschiedenen Attributen - (void)encodeWithXmlRpcCoder:(XmlRpcEnoder *)_coder { [_coder encodeString:[self firstname] [_coder encodeDate:[self birthday] [_coder encodeData:[self image] [_coder encodeObject:[self address] }... Ergebnis:
2. XML-RPC: XmlRpcSaxHandler Parsen von XML Dokumenten mit SAX: –SAX = Simple API for XML –Ereignisbasierte Callbacks z.B. Tag geht auf, Tag schliesst sich,… XmlRpcSaxHandler –Ergebnis: XmlRpcMethodCall bzw. XmlRpcMethodResponse –ABER: nur standard XML-RPC Typen!!! –ALLERDINGS: Zuordnung NSObjectClass Attribut zu Values
2. XML-RPC: XmlRpcDecoder XML Dokument XmlRpcMethodCall bzw. XmlRpcMethodResponse Mit korrekten Klassen!!! Verwendung des XmlRpcSaxHandlers Funktionsweise: 1.Instanzieren der Klasse anhand des NSObjectClass Attributes 2.Initialisieren dieser Klasse durch Aufruf von –initWithXmlRpcCoder: - (id)initWithXmlRpcCoder:(XmlRpcDecoder *)_coder { if ((self = [super init])) { [self setFirstname:[_coder [self setBirthday: [_coder [self setImage: [_coder [self setAddress: [_coder } return self; }
2. XML-RPC: XmlRpcClient XmlRpcClient *client = nil; NSString *location ; id result = nil; client = [[XmlRpcClient alloc] initWithLocation:location]; result = [client add param:[NSNumber numberWithInt:3] param:[NSNumber numberWithInt:5]]; // result enthält das Ergebnis [client release];
3. SOAP: Kurzer Überblick Prinzipiell wie XML-RPC, aber komplizierter XML Schema beliebige Datentypen spezielle Koder-Methoden fallen weg WSDL Service Beschreibung (IDL) Standard durch W3C Stark Propagiert durch Microsoft, IBM,... Einsatz in.NET, SUN ONE,...
4. Ausblick und weiterführende Arbeiten Bisherige Fortschritte bei SOAP Implementierung: –XML Schema Unterstützung: XmlSchemaClassGenerator, Encoding/Decoding –WSDLAnalyzer –Noch nicht stabil, aber bereits erste Verbindungen mit.NET, GOOGLE,... –XmlRpc-SOAP-PROXY
5. Zusammenfassung RPC = Remote Prozedure Call Wesentliche XML basierte RPCs: XML-RPC und SOAP libXmlRpc bietet XML-RPC Anbindung an Objective-C Unterstützung von beliebigen Typen ist gewährleistet. SOAP könnte Prozesskommunikation von SKYRiX ersetzen.
6. Ende Vielen Dank für Eure Aufmerksamkeit!