Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

Java EE 7: Web Services

Definition von Web Services

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Die Definition von Web Services erfolgt über Annotationen; ansonsten sind Web Services gewöhnliche Java-Klassen. Hier erstellen Sie einen Web Service und definieren eine Methode mit einer Rückgabe sowie eine langlaufende, nicht-blockierende Methode.

Transkript

Um XML Web Services anbieten zu können, müssen Sie diese zunächst definieren. In diesem Video werden wir uns damit auseinandersetzen, wie wir das tun können. Also einen Web Service definieren und Methoden für ihn bereitstellen. Zunächst einmal: Web Services sind im Java-Umfeld ganz normale POJOs. Plain Old Java Objects. Ganz einfache Java-Klassen. Hier gibt es also nichts spezielles zu beachten. Wir müssten nicht irgendwelche Interfaces oder irgendetwas implementieren. Web Services stellen natürlich Methoden bereit. Diese Methoden sind auch ganz normale Methoden. Auch hier muss man nichts spezielles beachten. Was wir allerdings beachten müssten, ist, dass Web Services zustandslos sind. Das bedeutet, der Server hält den Zustand für den Client in keinem Fall vor. Das bedeutet auf der anderen Seite, dass der Client selber dafür verantwortlich ist, seinen Zustand vorzuhalten und gegebenenfalls wieder dem Server die geeigneten Informationen zu übergeben. Um eine Klasse ls Web Service zu definieren, schreiben wir die Web Service-Annotation auf Klassenebene direkt hinzu. Diese Web Service-Annotation gibt uns noch einige mehr Optionen, aber letzlich reicht es aus, einfach die Klasse als solches mit Web Service zu annotieren. Die Methoden innerhalb der Klassen die als Web Service annotiert sind, sind für Clients nicht sofort sichtbar. Dies wird erst dann der Fall sein, wenn Sie diese Methode mit der Web Method-Annotation versehen. In dem Fall kann der Client die Methode aufrufen und erwartet dann immer die Rückgabe. Er verarbeitet sie also synchron. Das macht Sinn, solange wir nicht langlaufende Operationen auf dem Server anstoßen wollen. Das kann dann nämlich zu großen Problemen führen. Aus diesem Grund gibt es die One-Way-Annotation, die Sie ebenfalls auf Ebene einer Methode notieren können. Mit dieser Annotation wird ausgedrückt, dass der Server dem Client sofort bei Aufruf der Methode signalisieren soll, dass der Client nicht mehr auf eine Rückgabe warten muss. Der Client versteht dieses Signal in Form eines HTTP-Headers und beendet dann das Warten auf eine Rückgabe. Damit kann der Server eine langlaufende Operation ausführen, ohne dass der Client blockiert wird. Im folgenden werden wir einmal einen Web Service aufsetzen. Dieser wird über zwei Methoden verfügen. Eine normale, kurzlaufende und eine langlaufende Methode, die wir dann später mit der One-Way-Annotation versehen werden. Ein Client, der diese One-Way-Annotationen wahrnimmt, wird nun beim Aufruf der Methode nicht mehr warten, bis deren Verarbeitung abgeschlossen ist. Sondern er wird die Methode aufrufen und die Verbindung sofort trennen. Dies erlaubt es uns, langlaufende Operationen auszulagern und vom Client aus anzustoßen, ohne dass die Clients als solches dadurch blockiert werden. Sehen wir uns nun einmal an, wie wir einen Web Service, bestehend aus zwei Methoden, definieren können. Die eine Methode wird eine normale Methode sein. Die andere wird eine langlaufende Operation definieren, so dass wir dort mit der One-Way-Annotation arbeiten , um aus Client-Sicht ein brauchbares Laufzeitverhalten zu erzeugen. Ich habe meine Entwicklungsumgebung geöffnet. In meiner Entwicklungsumgebung werde ich nun ein neues Enterprise Application- Projekt anlegen. Dieses Enterprise Application-Projekt wird sich WS Server nennen. Es handelt sich dabei um die aktuelle Version 7.0. Ich füge einzig und allein das Webmodul hinzu, denn Web Services werden im Web-Modul gehalten. Im Web-Modul füge ich nun eine ganz normale Java-Klasse an. Das Package dieser Klasse kann ich frei wählen. Ich entscheide mich hier für de.video2brain.services. Der Name der Klasse ist ebenfalls frei wählbar. Zum Beispiel TestWebService. Damit diese Klasse als Web Service erkannt wird, benötigen wir die Web Services-Annotation. Nun können wir die entsprechenden Methoden hinzufügen. Wir definieren zwei Methoden. Eine Methode, die ganz normal laufen soll, Rückgabe ist ein String. Diese Methode heißt sayHello und nimmt einen Parameter vom Typ string entgegen. In dieser Methode mache ich jetzt keine sonstwie geartete Verarbeitung der Daten, sondern ich gebe nur diesen Parameter ergänzt um noch eine Zeichenkette zurück. Um diese Methode nun über einen Web Service verfügbar zu machen, muss ich sie als Web Method kennzeichnen. Ich definiere nun noch eine weitere Methode. Diese Methode ist vom Rückgabetyp her void, das heißt, sie hat keine Rückgabe, und sie macht irgendwas sehr langes. (tippt) Um das zu simulieren, werden wir hier die Methode schlafen legen, und zwar anhand des übergebenen Parameters die entsprechende Anzahl von Sekunden. Auch die Methode wird als Web Method gekennzeichnet. Damit habe ich diesen Web Service grundsätzlich definiert. Nun kann ich meinen Web Service auf dem Server deployen. Ich mache dies, indem ich auf die Schaltfläche Run klicke. Ich kann hier alle voreingestellten Dinge belassen und deploye meinen Web Service auf dem Server. Nach einigen Sekunden ist die Methode auf dem Web-Server verfügbar und wenn ich in die Konsole schaue, sehe ich auch, dass mein Web Service entsprechend bereit gestellt worden ist. Ich kopiere die Adresse und werde sie im Browser einmal öffnen um zu sehen, was passiert. Ein direkter Aufruf des Web Services wird nicht klappen. Sie sehen, dass die Rückgabe den HTML-Statuscode 405 beinhaltet. Dieser gibt uns Auskunft darüber, dass die Methode so nicht arbeiten kann. Aber wenn ich hintendran ?wsdl notiere, kann ich erkennen, dass der Web Service als solches korrekt ist und funktioniert, denn ich bekomme die Beschreibung des Web Service in Form einer WSDL-Datei geliefert. Nun kann ich diesen Web Service nutzen und testen. Zum Testen des Projektes verwende ich SoapUI. SoapUI ist eine kostenlose Applikation, eine der bekanntesten Test-Applikationen für Web Services. Die können Sie sich frei über Source Forge herunterladen. Ich lege hier im SoapUI erstmal ein neues SOAP-Projekt an. Ich gebe ihm einen schicken Namen und gebe ihm die Adresse zum WSDL für den Web Service. Ich setze auch das Häkchen bei Create sample requests for all operations? und klicke auf OK. Jetzt wird das WSDL ausgewertet und es werden Requests für die beiden angebotenen Operationen, nämlich sayHello und doSomethingVeryLongLasting, erzeugt. Wenn ich jetzt in den sogenannten Request Editor reingehe, für den Request 1 bei sayHello, dann kann ich jetzt hier einen Wert übergeben und kann dann den Request ausführen. Ich sehe direkt das SOAP-Ergebnis. Das ist genau das, was ich erwarte. Nun gehe ich in den zweiten Request und gebe hier einmal den Wert 10 an, bei doSomethingVeryLongLasting. Ich klicke dann ebenfalls auf das Ausführen. Ich muss jetzt tatsächlich ungefähr 10 Sekunden warten, bis dieser Request abgearbeitet worden ist. Sobald der Request abgearbeitet worden ist, sehe ich die entsprechende Rückgabe. Das hat ziemlich genau 10 Sekunden gedauert, wie man hier unten an dem Statuseintrag mit der Response Time sehen kann. Genau das ist aber eigentlich das, was wir nicht wollen, wenn wir Web Services-Methoden definieren, die langlaufend sind. Daher werden wir nun noch einmal in die Entwicklungsumgebung gehen und das One-Way-Attribut auf Ebene dieser Langlaufoperation setzen. Hier mit Clips füge ich nun die One-Way- Annotation meiner Web-Methode hinzu. Das ist alles, was ich tun muss. Ich kann jetzt die Web-Applikation auf dem Server neu deployen und sobald dies geschehen ist, kann ich im Test-Tool erneut den Aufruf auf diese langlaufende Methode durchführen Änderungen sind an dieser Stelle nicht nötig. Ich führe einfach die Anfrage aus und innerhalb von wenigen Millisekunden – neun Millisekunden – ist die Anforderung abgeschlossen. Anders als bei gewöhnlichen Anforderungen erwartet der Client an dieser Stelle auch keinerlei Antwort vom Server. Dies ist ihm nämlich vom Server signalisiert worden über den Statuscode 202: accepted. Er sagt aus: "Ich habe deine Anforderung entgegengenommen. Du musst aber nicht mehr auf eine Rückmeldung meinerseits warten." Damit trennt der Client die Verbindung und weiß, die langlaufende Operation ist angestoßen worden. In diesem Video haben wir uns damit auseinandergesetzt, wie wir Web Services definieren können. Wir haben über die Web Services- Annotation gesprochen, die auf Klassenebene definiert werden muss. Wir haben über die Web-Method-Annotation für die Methodenebene gesprochen. Und wir haben uns angeschaut, wie sich die Verwendung oder das Weglassen der One-Way-Annotation auswirkt.

Java EE 7: Web Services

Steigen Sie ein in die Java-Enterprise-Welt und lernen Sie, wie Nachrichten ausgetauscht und Dienste definiert werden.

5 Std. 13 min (30 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!