WebService Rapid Prototyping Framework II
Wer schon einmal einen Webservice entwickelt hat oder nur einen in eine eigene Anwendung einbinden wollte, hat sich sicher schon einmal gewünscht, diesen Webservice ohne viel Aufwand zu testen. Da wir keine uns befriedigende Lösung gefunden haben, schlagen wir in dieser Artikelserie eine eigene Lösung vor, nachdem wir im ersten Teil zwei bestehende Alternativen diskutiert haben.
Grundlagen einer eigenen Lösung
Folgende drei Bausteine dienen als Grundlage unserer eigenen Lösung zum Testen von Webservices:
- Auswahl der Programmierumgebung
- Einbindung in eigene Anwendung
- Erzeugen der Bedienoberfläche
Auswahl der Programmierumgebung
Das Framework wird genau wie die Beispielanwendung mittels Java erstellt.
Einbindung in eigene Anwendung
Wir benutzen zum Zugriff auf die WSDL-Beschreibung von Webservices ein bekanntes OpenSource-Urgestein in Gestalt von Axis 1.4. Wir benutzen die Version 1.4, da es damit bei uns einfach schon viele Erfahrungen gibt und wir an einer möglichst schnellen Realisierung des Prototypen interessiert waren. Generell sollte sich aber Axis 2 ebenso verwenden lassen. Axis erzeugt (über WSDL2Java) Java-Codefragmente, die in eigenen Anwendungen eingebunden werden können. Diese Fragmente erscheinen dann als normale Komponenten, deren Methoden man aufrufen kann. Daß die Methoden als Webservice-Operationen auf einem entfernten Server ausgeführt werden, bleibt dem Programmierer verborgen.
Die von Axis generierten Code-Fragmente müssten in einem anschließenden Schritt kompiliert werden. Das würde der gestellten Anforderung zuwiderlaufen, die da hieß, daß auch nicht-Programmierer das Werkzeug handhaben können sollen. Daher haben wir uns einer weiteren OpenSource-Lösung bedient:
Janino ist eine Bibliothek, die es erlaubt, zur Laufzeit einer Anwendung Java-Quelltexte transparent in Java-Bytecode umzusetzen und dann in der Anwendung zu verwenden. Man braucht die Quelltexte also nicht mehr zu kompilieren - ideal für unsere Zwecke: die von Axis generierten Fragmente werden unsichtbar für den Anwender über den Spezial-Classloader des Janino-Projekts als Klassen in der Anwendung verfügbar.
Erzeugen der Bedienoberfläche
Hierzu kommt unser JavaBeans Framework JBFF zur Anwendung. Die zentrale Komponente von JBFF bekommt die mit Axis erstellte und von Janino in Bytecode umgewandelte Webservice-Klasse übergeben und erzeugt auf dieser Basis für jede Operation in einem Webservice ein Formular. Diese Formulare enthalten für jeden Parameter der jeweiligen Operation ein Bedienelement, das auf den Typ des Parameters abgestimmt ist. So wird zum Beispiel für einen Parameter als Datum ein Knopf erstellt, der einen Kalender zur Datumsauswahl öffnet.Hier ist ein solches Formular beispielhaft für unseren ersten kleinen Webservice dargestellt:
Jedes dieser Formulare enthält einen Knopf, der die Operation mit den eingegebenen Parametern ausführt ("execute". Ergebnisse werden in einem Dialog angezeigt:

Das Verhalten der Lösung bei nichttrivialen Parametern wird in den folgenden Artikeln untersucht.

