Konzeption und Implementierung einer und
Anbindung
Praktikumsbericht von Martin Spindler
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
• Unterstützung von Skriptsprachen Automatisieren von Operationen
• Unterstützung von Hochsprachen native Clients
• Nutzen fremder Services
Standardisierte Schnittstellen:
–
Schichten
• verschiedene Abstraktionsstufen• gutes Software Design• unabhängige Libraries• Trennung von UI und Model
–
Schichten Prozesse
1.
Verteilte Prozesse• Stabilität
• Skalierbarkeit
• Performance steigt
• RPC Remote Procedure Call• Aufruf von Funktionen auf entfernten Rechnern• Funktion = Name + Parameter + Resultat
• RPC über XML und HTTP• Unterstützt von vielen Programmiersprachen• Spezifikation: http://www.xmlrpc.com
Call: add(3,5)
<methodCall> <methodName>add</methodName> <params> <param> <value><int>3</int></value> <param> <param> <value><int>5</int></value> <param> </params></methodCall>
<methodResponse> <params> <param> <value><int>8</int></value> <param> </params></methodResponse>
Response: 8
<i4> oder <int> 4 Byte Integer -42
<boolean> Wahr oder Falsch 1
<string> ASCII String Hello World
<double> Fließkommazahl -23.52341
<dateTime.iso8601> Datum / Zeit 19980717T14:08:55
<base64> Binäre Daten eW9lYWQgdGhpcyE=
<array> <data> <value><int>3</int></value> <value>...</value> ... </data></array>
<struct> <member> <name>person_id</name> <value><int>3</int></value> </member> ...</struct>
Skalare Typen:
Komplexe Typen:
• „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]
Klassen:
XmlRpcMethodCall
XmlRpcMethodResponse
XmlRpcSaxHandler
XmlRpcDecoder
XmlRpcEncoder
XmlRpcMethodCall XmlRpcMethodResponse -initWithName:parameters:
-initWithXmlRpcString:
-paramters
-methodName
-xmlRpcString
-initWithResult:
-initWithXmlRpcString:
-result
-xmlRpcString
• XmlRpcMethodCall bzw. XmlRpcMethodResponse XML Dokumente
• Beispiel: Person-Klasse mit verschiedenen Attributen
- (void)encodeWithXmlRpcCoder:(XmlRpcEnoder *)_coder {
[_coder encodeString:[self firstname] forKey:@”firstname”];
[_coder encodeDate:[self birthday] forKey:@”birthday”];
[_coder encodeData:[self image] forKey:@”image”];
[_coder encodeObject:[self address] forKey:@”address”];
}
<value NSObjectClass=“Person“> <struct>...</struct></value>
Ergebnis:
• 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
• 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 decodeStringForKey:@”firstname”]];
[self setBirthday: [_coder decodeDateForKey:@”birthday”]];
[self setImage: [_coder decodeDataForKey:@”image”]];
[self setAddress: [_coder decodeObjectForKey:@”address”]];
}
return self;
}
XmlRpcClient *client = nil;
NSString *location = @“http://xmlrpc.test.com/Calculator“;id result = nil;
client = [[XmlRpcClient alloc] initWithLocation:location];
result = [client invokeMethodName:@“add“ param:[NSNumber numberWithInt:3]
param:[NSNumber numberWithInt:5]];
// result enthält das Ergebnis
[client release];
• 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, ...
• 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
• RPC = Remote Prozedure Call
• Wesentliche XML basierte RPCs: und • libXmlRpc bietet XML-RPC Anbindung an Objective-C
• Unterstützung von beliebigen Typen ist gewährleistet.
• SOAP könnte Prozesskommunikation von SKYRiX ersetzen.