Web Services mit Groovy
Auf der Suche nach eine Bibliothek zum Implementieren von Web Services bin ich letztens auf GroovyWS gestoßen. Auf der Projektseite finden sich einige Beispiele, die zeigen wie man mit extrem wenig Code lauffähige Dienste anbieten kann. Leider funktionieren diese Beispiele mit der aktuellen Version der Bibliothek nicht mehr. Nach einer etwas längeren Suche, habe ich mich dazu entschlossen die lauffähige Version an dieser Stelle zu veröffentlichen.
Bei dem MathService aus dem Beispiel handelt es sich wahrscheinlich um das klassische Beispiel, wenn man grundliegende Funktionalität von Diensten zeigen möchte. Ähnlich wie das Bekannte “Hello World” in den meisten Programmiersprachen obligatorisch angeboten wird. In diesem Fall wird aber nicht nur eine Zeichenkette ausgegeben. Wie der Name MathService schon vermuten lässt, können über den Dienst mathematische Operationen genutzt werden. Da es sich um ein einfaches und realitätsfernes Beispiel handelt, werden sogar nur zwei solcher Operationen angeboten: add und square.
class MathService {
double add(double arg0, double arg1) {
return (arg0 + arg1)
}
double square(double arg0) {
return (arg0 * arg0)
}
}
(Anmerkung für Groovy-Neulinge: Da aus Groovy-Klassen Java Klassen kompiliert werden, muss der obige Source Code in die Datei MathService.groovy gepackt werden. Dateien haben also den gleichen Namen wie die Klassen.)
Als nächstes wird natürlich noch ein Web-Server benötigt, über den der Dienst bereitgestellt wird. GroovyWS bring dazu einen integrierten Jetty mit sich, der den Dienst per HTTP serviert. Folgendes Skript erledigt all dies in 4(!) Zeilen Code.
import groovyx.net.ws.WSServer
def server = new WSServer()
server.setNode("MathService", "http://localhost:6981/MathService")
server.start()
Beachtlich, was da alles im Hintergrund passiert. Obwohl mich das auch ein wenig beunruhigt, wenn mir so viel Arbeit abgenommen wird bzw. ich so viel Kontrolle abgebe. Aber es funktioniert und um dies nun auch zu testen, kann die erzeugte WSDL Beschreibung abgerufen werden: http://localhost:6981/MathService?wsdl
Nun soll der Dienst auch verwendet werden. Um die mathematischen Operationen des MathService zu testen, dient das folgende Skript:
import groovyx.net.ws.WSClient
def proxy = new WSClient("http://localhost:6981/MathService?wsdl", this.class.classLoader)
proxy.create() // Diese Zeile fehlt in den Beispielen auf der Projektseite
print proxy.add(10.0 as double, 12.0 as double)
print proxy.square(4.0 as double)
Damit ist das laufende Beispiel für einen Web Service mit Server und Client abgeschlossen. Weitere Beispiele finden sich in dem Blog von Geertjan. In den nächsten Wochen werde ich noch weitere Dienste in einem Projekt implementieren und dazu GroovyWS nutzen. Mal sehen wie sich die Bibliothek bei der Realisierung von echten Diensten und größeren Problemen eignet.
Zuletzt möchte ich noch auf SoaMoa aufmerksam machen. Ein Tool mit dem sich Web Services relativ gut testen lassen. Vieleicht kann der ein oder andere es beim Debuggen einsetzten.