Auf dieser Seite wird gezeigt, wie ein einfacher Web Service und ein dazu passender Client implementiert werden können. Als Beispiel wird ein Service entworfen, der auf dem bekannten relationalen Universitäts-Datenbankschema aufbaut. Der Dienst ermöglicht die Abfrage des Lehrumfangs von Professoren. Unter Lehrumfang ist die Summe der Semesterwochenstunden (SWS) der gehaltenen Vorlesungen zu verstehen. Hierzu delegiert der Web Service den Aufruf an eine Klasse, die eine JDBC-Verbindung zu einer Datenbank aufbaut und auf dieser die eigentliche Abfrage durchführt. In SQL lässt sich die Abfrage für einen Professor mit Namen 'ProfName' wie folgt formulieren:
| SELECT SUM(v.SWS) AS LehrUmfang FROM Vorlesungen v, Professoren p WHERE v.gelesenVon = p.PersNr AND p.Name ='ProfName' |
|
Der vorgestellte Service heißt UniVerwaltung und ist für Testzwecke unter der folgenden URL errreichbar
Das bereitgestellte zip-Archiv enhält folgende Dateien (Der Ordner, in welchen die Klassen erzeugt werden, wird im Folgenden mit $src abgekürzt):
Neben einer aktuellen Java-Version wird benötigt:
Zum Testen des Beispiel-Web Services benötigt man einen Web Server. Hierfür empfehlen wir Apache Tomcat Version 4 oder 5 (http://jakarta.apache.org/tomcat). Der Installationspfad von Tomcat wird im Folgenden als <catalina_home> bezeichnet.
Um die Erstellung des Web Services und das Ausführen des Clients zu erleichtern, ist den Sourcen ein Apache Ant build-file (build.xml) beigefügt. Hierzu wird eine aktuelle Version von Ant benötigt. Zudem sollten die ausführbaren Skripten (im Verzeichnis <apache-ant.home>/bin, wenn <apache-ant.home> der Installationspfad von Ant ist) in die PATH-Umgebungsvariable mit aufgenommen werden, sowie die Bibliotheken (im Verzeichnis <apache-ant.home>/lib) zum CLASSPATH hinzugefügt werden.
Im Folgenden wird vorgestellt, wie aus einer WSDL-Beschreibung automatisch
die Java-Klassen des Web Services generiert werden können (bzw. das
"Gerüst" des Services). Dazu wird die Apache Axis Bibliothek benötigt,
die auf der Seite
http://ws.apache.org/axis
heruntergeladen werden kann.
Der Axis-Web-Server muss in Tomcat eingebunden werden. Dazu muss das
Verzeichnis <axis.home>/webapps/axis in das Tomcat-Verzeichnis kopiert
werden (<catalina.home>/webapps). Siehe hierzu die
Installationsdokumentation von Apache Axis selbst. Bevor mit dem Test
des UniVerwaltung-Web Services begonnen wird, sollte die Installation
von Axis erfolgreich getestet worden sein.
Apache Axis benötigt zur Ausführung einen XML Parser (Xerxes oder
Crimson). Siehe hierzu den Users-Guide von Axis.
Der Zugriff auf die Datenbank erfolgt über JDBC. Der dafür notwendige Treiber ist Datenbankhersteller-abhängig, so dass wir ihn an dieser Stelle nicht genauer angeben können. SQL-Skripten zum Aufbau einer eigenen Beispiel-Datenbasis einer Universitätsverwaltung finden Sie hier. Der Treiber muss für die Ausführung im CLASSPATH aufgelistet sein. Kopieren Sie ihn dazu z.B. in das Tomcat-Verzeichnis <catalina.home>/common/lib. (Hinweis: endet der Treiber auf .zip, so sollten Sie ihn in eine .jar-Datei umbenennen. Andernfalls kann es vorkommen, dass der Treiber nicht geladen wird)
Zuerst muss das angegebene zip-Archiv heruntergeladen und entpackt werden.
Als nächstes muss das Ant
build.xml-File angepasst werden, d.h. Bibliothekspfade etc. müssen
auf die lokale Installation angepasst werden.
Zu ändernde Properties:
Dieses Beispiel soll zeigen, wie aus der Beschreibung eines Web Services mittels WSDL der eigentliche Dienst semi-automatisch erzeugt werden kann. Das Verhalten des Dienstes wird in der zugehörigen WSDL-Datei festgelegt. Ein WSDL-Dokument besteht aus einem abstrakten Abschnitt das prinzipiell types-, message- und portType- Definitionen umfasst. Abstrakt deshalb, weil die Definition unabhängig von Endpunktadressen (URLs) vorgenommen wird. Die geschieht in dem anschließenden konkreten Teil, der aus binding-, port- und service-Definitionen besteht. Unter anderem beinhaltet das WSDL-Dokument des Beispiel-Web Services:
Apache Axis bietet die Möglichkeit aus der Beschreibung eines Dienstes mittels WSDL automatisch Java-Klassen zu erstellen, die das Gerüst des Services darstellen. Der Programmierer des Dienstes muss dann nur noch an einer Stelle die Funktionalität einfügen. Um die Java-Klassen zu erstellen ist folgender Aufruf notwendig:
ant wsdl2java
Folgende Dateien werden dadurch (im $src Ordner) erzeugt:
Im Ordner /UniVerwaltung befindet sich zudem noch die Datei InquireDB.java. Die Klasse InquireDB enthält die eingentliche Programmlogik, d.h. sie dient zum Aufbau einer Verbindung zur Datenbank und zum stellen der Anfrage, wie groß der Lehrumfang für einen bestimmten Professor ist.
Notwendige Änderungen:
return InquireDB.getLehrUmfangVonProfessor( profName );
ersetzen.Um den Web Service tatsächlich zu installieren muss
ant deploy
aufgerufen werden. Dieser Aufruf bewirkt, dass der temporäre Ordner build erzeugt wird, in den die Sourcen kompilert werden. Anschließend werden die erzeugten Klassendateien in den classes-Ordner von Axis kopiert (mit Ausnahme von Client.class) und mittels deploy.wsdd die Installation des Services abgeschlossen. Wichtig: falls Änderungen an Java-Klassen durchgeführt werden, so muss ggf. der Web Server neu gestartet werden, um ein evtl. Caching des Web Servers zu umgehen. Damit ist die Installation abgeschlossen.
Kopieren Sie die Klasse $src/Client.java in das Verzeichnis, in welchem sich auch die automatisch generierten Service-Klassen befinden ( da diese Testklasse die zuvor erstellten Service-Klassen verwendet) und passen Sie die Package-Definition an. Anschließend können Sie das Testprogramm übersetzen und mit
ant run-client
ausführen. Dabei wird als Parameter der Name des Professors, dessen Lehrumfang ermittelt werden soll, mit übergeben. Dieser Parameter lässt sich in build.xml über das Property Call.ProfName ändern.
Ein weiteres Client-Programm (ClientUniVerwaltung.java) kann ohne zusätzliche Pakete übersetzt und ausgeführt werden. In dieser Klasse ist die SOAP-Kommunikation nachvollziehbar, die in dem zuvor vorgestellten Client-Programm verborgen ist.
Die Deinstallation des Web Services erfolgt mittels
ant undeploy
Zusätzlich sind in build.xml noch die Properties redeploy (Deinstallieren und erneutes Installieren) und clean (Löscht den Inhalt des build-Ordners) enthalten.