Inhaltsverzeichnis
Vorwort 5
Web Service Tutorium - Erstellung eines Gästebuchs 6
Service-Projekt erstellen. 14
XSD: Gästebuch-Schema erstellen. 16
WSDL: Gästebuch-Service-Schnittstelle erstellen. 22
Generierung der Java-Klassen. 32
Service: Implementierung des Gästebuch-Web Services 53
Implementierung des Gästebuch-Clients 60
Grundlagen für das Verständnis eines Web Services 94
Die XSD – Typen-Entwicklung in XML. 94
Die WSDL – Aufbau eines SOAP Services 101
Apache CXF – automatische Erstellung eines Web Services 109
Servlets - Die Grundlagen. 125
Servlet-Container 125
Packages 126
Häufig verwendete Interfaces und Klassen. 127
HTTP-Grundlagen. 130
Aufbau der URLs 131
HTTP-Methoden. 131
Wichtige HTTP-Statuscodes 133
JSP – Grundlagen. 136
Die Syntax von JSPs und ihre Bestandteile. 137
Implizite Objekte. 141
Client-Anfragen. 147
Beans in JSPs 149
JSP-Standardaktionen. 154
Fehler- und Ausnahmebehandlung. 157
Expression Language. 160
Java Standard Tag Library (JSTL) 164
Internationalisierung. 165
Servlet-Filter 167
Abbildungsverzeichnis 170
Web Services begegnen uns öfter als wir vermuten. Meist verbergen sie sich hinter anderen Begriffen wie „App“ oder „Cloud“. Wie man das Kind auch letztlich nennt: Es geht hier immer darum, dass ein Server, der aus dem Internet leicht erreichbar ist, einen Dienst bereitstellt, der von Clients genutzt werden kann. Diese Clients sind oft erkennbar als „Webbrowser“ oder aber Anwendungen, die im Internet Anfragen stellen können und auf eine Antwort warten.
Ziel dieses Buches ist es zu zeigen, was hinter einem Web Service steckt. Wir wollen mit einfachen Mitteln einen Service aufbauen, der auf einem Application Server wie Tomcat laufen kann. Dann wollen wir verschiedene Clients ausprobieren, um den Service zu testen.
Da es uns nicht darum geht, eine besonders interessante Spezialanwendung zu entwickeln, haben wir uns entschieden, das gute alte Beispiel eines Gästebuches neu zu beleben. Das hat einfache Gründe. Alles, was wir brauchen, um einen Dienst mit Eingaben über ein Formular und Ausgaben auf einem Bildschirm zu entwickeln, lässt sich hier leicht darstellen. Und unser Ziel ist letztlich nicht das Gästebuch, sondern die Kenntnis über den Bau eines Web Services.
Nach dem zügigen Aufbau von Server- und Client-Programmen schauen wir uns die Theorie an, die hinter dem Ganzen steckt. Die Beleuchtung des Hintergrundes nimmt dabei den größten Teil des Buches ein.
Mit dem Gesamtverständnis, das dieses Buch vermitteln will, kann der interessierte Leser schnell selbst einen Web Service programmieren. Dabei ist es egal, ob er eine Suchmaschine im Internet anbieten will, einen neuen Webshop oder eine App für Smartphone – mit den passenden Tools und genauer Planung des Services sollte das sofort gelingen.
Dieses Tutorium beschreibt, wie ein Gästebuch als Web Service erstellt wird. Dabei verwenden wir die Werkzeuge Eclipse, Apache CXF und Apache Tomcat 7.0. Zunächst bauen wir einen Dienst auf dem Server auf. Zum Test der Funktionsweise des Gästebuch-Web-Services entwickeln wir dann eine Java-Client-Applikation, die den Web Service benutzt. Wir verfolgen den sogenannten Top-Down-Ansatz (WSDL-to-Java). Dabei wird zuerst die Service-Schnittstelle festgelegt und anschließend auf Basis dieser Schnittstelle die Service-Implementierung angelegt.
Dieses Tutorium setzt voraus, dass die Java JDK (hier: jdk1.7.0_17-64bit) und Eclipse (hier: eclipse-4.3“ aus eclipse-jee-kepler-M5-win32-x86_64) installiert ist, und dass weiterhin Eclipse korrekt mit Tomcat (hier: apache-tomcat-7.0.37-64bit) verbunden wurde. Dazu nehmen wir eine Basiskonfiguration innerhalb von Eclipse vor.
Eclipse bietet die Möglichkeit Zeilennummern für Quellentexte auszugeben. Wir wählen im Eclipse-Menü Window
->
Preferences
->
General
->
Editors
->
Text Editors
aus und setzen den Haken beim Parameter Show line numbers
. Drücken Sie dann auf den Schalter Apply
am Ende des Fensters.
Abbildung 1: Editor in Eclipse konfigurieren - Zeilennummern
Eclipse hat bereits eine Java-Umgebung als Standardumgebung eingetragen. Wir wollen aber die von uns installierte JDK 1.7.0 Version 17 verwenden. Dazu legen wir nun eine neue Java JRE in Eclipse an: Wir wählen im Eclipse-Menü die Kombination Window
->
Preferences
->
Java
->
Installed JREs
aus. Drücken Sie auf den Schalter Add…
(Abbildung 2) und danach im folgenden Fenster auf Standard VM
und Next
. Wählen Sie mit Hilfe des Schalters Directory…
eine JRE-Home
aus und jetzt klicken Sie auf den Schalter Finish
(Abbildung 3).
Abbildung 2: Neue JRE einfügen
Abbildung 3: JRE-Umgebung auswählen
Aktivieren Sie das Feld neben dem Namen der zu verwendenden JDK-Version (Abbildung 4). Klicken Sie dann auf den OK
-Schalter, um diese Einstellung bereits zu speichern. Vergessen Sie außerdem nicht, die Umgebungsvariable JAVA_HOME
in den Systemeinstellungen zu setzen.
Abbildung 4: Installierte JRE in Eclipse auswählen
Wir drücken im Eclipse-Menü Window
-> Preferences
-> Server
-> Runtime Environment
den Schalter Add
..., um die Tomcat-Umgebung einfügen zu können (Abbildung 5). Wählen Sie Server Apache
-> Apache Tomcat 7.0
. Klicken Sie auf Next
(Abbildung 6).
Abbildung 5: Server Runtime Environments in Eclipse konfigurieren
Abbildung 6: Apache Tomcat v7.0 auswählen
Geben Sie das Tomcat- Installationsverzeichnis ein sowie die JRE-Umgebung. Klicken Sie dann auf den Schalter Finish
(Abbildung 7). Damit ist in Eclipse die Tomcat-Umgebung spezifiziert (Abbildung 8). Setzen Sie unbedingt für Tomcat auch die Umgebungsvariable CATALINA_HOME
in den Systemeinstellungen.
Abbildung 7: Tomcat- Installationsverzeichnis und JRE-Umgebung konfigurieren
Abbildung 8: Tomcat-Konfiguration in Eclipse
Nun wird noch das Werkzeug für die Erstellung des Web Services benötigt. Laden Sie Apache CXF 2.x aus dem Internet herunter. Danach entpacken Sie das Archiv (apache-cxf-2.7.2.zip oder eine neuere Version). Merken Sie sich unbedingt das Installationsverzeichnis. Setzen Sie auch die Umgebungsvariable CXF_HOME
auf das Root-Verzeichnis der CXF-Installation.
Abbildung 9: CXF 2.x Preferences in Eclipse konfigurieren
Wir wählen im Eclipse-Menü Window
->
Preferences
->
Web Services
->
CXF 2.x Preferences
-> Add
... aus (Abbildung 9). Geben Sie das Apache CXF-Installationsverzeichnis ein und jetzt klicken Sie auf den Schalter Finish
. Wenn Sie die Umgebungsvariable CXF_HOME
korrekt eingegeben haben, dann findet Eclipse die Version
und den Type
selbständig (Abbildung 10).
Abbildung 10: CXF- Installationsverzeichnis und Version konfigurieren
Aktivieren Sie das Kontrollfeld der Version des Apache CXF und klicken Sie auf Apply
am Ende des Unterfensters (Abbildung 11).
Abbildung 11: CXF 2.x Preferences in Eclipse bestätigen
Die Konfiguration Java2WS ist zur Erstellung der WSDL-Datei gedacht, wenn man zuerst den Java-Code erstellt. Hier aktivieren wir die Schalter Generate Client
und Generate Server
(Abbildung 12).
Abbildung 12: Konfiguration für Java2WS
Für unsere Zwecke benötigen wir die Konfiguration WSDL2Java (Abbildung 13). Außerdem aktivieren wir die ersten fünf Schalter im Reiter JAX-WS zur JAX-WS Annotation Generation
(Abbildung 14).
Abbildung 13: Konfiguration für WSDL2Java
Abbildung 14: Konfiguration für JAX-WS
Jetzt bereiten wir die Tools für den Einsatz in Eclipse vor. Wählen Sie dazu im Menü die Kombination mit der Folge Window
-> Preferences
-> Web Services
-> Server and Runtime
aus (Abbildung 15). Wählen Sie die Tomcat- sowie die Apache CXF-Umgebung in den beiden Auswahlfeldern aus, klicken Sie auf den Schalter Apply
und danach auf den Schalter OK
.
Abbildung 15: Tomcat-Server und CXF-Umgebung in Eclipse setzen
Öffnen Sie die Ansicht Servers
im Eclipse-Menü mit der Kombination Window
-> Show View
-> Servers
(
Abbildung 16). Dann legen Sie einen neuen Server in dieser Server-View an. Klicken Sie in der View die rechte Maustaste an und wählen Sie New
-> Server
aus. Wählen Sie den Apache Tomcat v7.0 Server aus und jetzt klicken Sie auf den Schalter Finish.
Abbildung 16: Server in Eclipse aktivieren
Damit sind alle vorbereitenden Konfigurationen in Eclipse abgeschlossen.
Die Erstellung eines Projektes beginnt in Eclipse mit der Auswahl und Einrichtung eines speziellen Projektes. Hierfür hat Eclipse einige Varianten zur Auswahl.
Erstellen Sie in Eclipse ein Web-Projekt. Dazu wählen Sie im Kontext-Menü der Projektansicht die Kombination File
-> New -> Project...
und danach die Kombination Web -> Dynamic Web Project
(Abbildung 17). Klicken Sie auf den Schalter Next
.
Abbildung 17: Neues Projekt anlegen
Wir wollen den Service GuestBookService
nennen. Die Target Runtime sollte bereits auf Apache Tomcat v7.0
stehen. Klicken Sie auf den Schalter Finish
.
Nun kann die eigentliche Arbeit losgehen. In den folgenden Unterkapiteln wollen wir die Datentypen definieren und unseren Web Service spezifizieren. Im Anschluss daran lassen wir Eclipse den Quellcode generieren und passen diesen im Nachgang an unsere Anforderungen an.
Abbildung 18: Dynamic Web Projekt einrichten
Für die XML-Dateien benötigen wir einen eigenen Ordner im Projektverzeichnis. Wählen Sie also im Kontextmenü der Projektansicht New -> Folder
. Geben Sie den Ordnernamen als xml
ein und klicken Sie auf den Schalter Finish
(Abbildung 19). Im XML-Verzeichnis wollen wir unser XML-Schema ablegen. Wählen Sie aus dem Kontextmenü dieses XML-Ordners heraus die Kombination New -> Other… -> XML -> XML Schema File
. Klicken Sie jetzt auf den Schalter Next
(Abbildung 20).
Abbildung 19: Ordner für XML-Dateien anlegen
Abbildung 20: XML-Schema-Datei anlegen
Wir wollen unser Schema GuestBook.xsd
nennen (Abbildung 21).
Abbildung 21: XML-Schema mit Namen GuestBook.xsd definieren
Abbildung 22: XML- Schema-Namespace verändern
Ändern Sie den Schema-Namespace mit Rechtsklick über dem Schema
und Klick auf Show properties
(Abbildung 22):
Abbildung 23: Schema-Namespace eingeben
Wir wollen nun ein Gästebuch-Schema-Typ namens GuestBookType
erstellen, dazu klicken wir mit der rechten Maustaste über Types
und wählen Add Complex Type
aus.
Abbildung 24: Erstellen eines Gästebuch-Schema-Typs
Auf den neu erstellten Typ klicken wir doppelt und fügen dann ein Gästebucheintrag-Element zu diesem Gästebuch-Typ hinzu, indem wir mit der rechten Maustaste auf GuestBookType
klicken und danach Add Element
anklicken. Das Element soll nun den Namen entry
erhalten.
Abbildung 25: Gästebucheintrag-Element hinzufügen
Erstellen Sie einen neuen Schema-Typ mit dem Namen GuestBookEntryType
, klicken Sie dazu zunächst mit der rechten Maustaste und dann durch die Kombination string -> Set Type -> New...
(Abbildung 26).
Abbildung 26: Neuen Schema-Type definieren
Fügen Sie dem GuestBookEntryType
ein Attribut mit dem Namen ID
(mittels Add Attribute
) und Elemente (mittels Add Element
) mit den Namen name
, eMail
und message
hinzu.
Abbildung 27: Name des neuen Schema-Typs eingeben
Abbildung 28: Attribut und Elemente eintragen
Abbildung 29: Definitionen des Schema-Typs
Die Multiplizität des Gästebuch-Typs stellen Sie nun auf 0..* (Zero or more)
.