AWS |
Annotation Web Service - Implementierungs HowtoEinleitungDieses Dokument beschreibt, wie der Annotation Web Service mit Hilfe des Apache Axis SOAP Frameworks entwickelt wurde. Die Dokumentation geht davon aus, dass Apache Axis bereits installiert ist. Detailierte Anweisungen dazu sind unter http://ws.apache.org/axis/java/install.html zu finden. ImplementierungFür den hier entwickelten Annotations Web Service wurde zunächst von einem Java Interface und mehreren Klassen ausgegangen. Mit Hilfe von Apache Axis wurde aus diesem Interface und den Klassen eine WSDL Beschreibung generiert. Aus dieser Beschreibung wurden anschließend automatisch Java Klassen für den Server (ein so genanntes skeleton) und den Client (ein so genannter stub) generiert. Diese Klassen kapseln unter anderem die darunterliegende SOAP-Implementierung, so dass der Benutzer lediglich die Java Schnittstelle zu betrachten braucht und den Web Service wie eine lokale Instanz dieser Klasse verwendet. Definition des Java Interfaces und automatische Generierung einer WSDL Beschreibung mit Java2WSDLAls erstes wurden die benötigten Methoden des Annotations Web Services mit ihren Parametern und Rückgabewerten als ein Java Interface definiert. Die dabei benötigten Datentypen wurden als einfache Java Klassen, wie Annotation, Auth, Scope, User, Group, Anchor und Replies dargestellt. Nach dem Kompilieren aller Klassen wurde mittels Java2WSDL aus dem Apache Axis Framework eine WSDL-Beschreibung des Web Services generiert. Hierfür wurde der folgender Programmaufruf verwendet:
Die verwendeten Optionen geben dabei folgendes an:
Der letzte Parameter gibt die Klasse an, die das Interface des Web Services enthält. Diese automatisch generierte WSDL-Beschreibung, bildet den Ausgangspunkt für die Implementierung des Annotations Web Services sowie eines Clients. Mit geeigneten Werkzeugen können aus dieser WSDL-Datei die Schnittstellen und Datentypen in einer Programmiersprache generiert werden. Automatische Generierung der Java Klassen für Server und Client (Skeletons und Stubs)Für den hier entwickelten Annotationsserver wurde mit Hilfe WSDL2Java aus dem Apache Axis Framework die verwendeten Java Klassen und Interfaces aus der WSDL-Beschreibung generiert. Der verwendete Programmaufruf sieht dabei folgendermaßen aus:
Die verwendeten Optionen geben dabei folgendes an:
Der Befehl generiert ein Codegerüst für die Server- und für die Clientseite sowie für jeden Datentyp eine eigene Klasse. Diese Klassen enthalten automatisch generierten Code für die Kommunikation mittels SOAP, so dass der Programmierer sich nicht mehr mit den SOAP-Implementierungsdetails beschäftigen muss. Anstatt dessen benutzt er die automatisch generierten Klassen. Für die Serverseite wird dafür eine so genannte Skeleton-Klasse, für die Clientseite eine so genannter Stub generiert. Beide Klassen implementieren das Aws Java-Interface. Die einzelnen Methoden die das Aws Interface bereitstellt, müssen in der Skeleton-Klasse nur noch implementiert werden. Die Stub-Klasse ist das Gegenstück der Skeleton-Klasse auf der Seite des Clients. Sie enthält bereits automatisch generierten Javacode für die Kommunikation mit dem Server. Ein Java-Programm kommuniziert mit dem Server indem es eine Instanz dieser Stub-KIasse verwendet. Die Klassen, welche die Datentypen repräsentieren, wie Annotation, Anchor, Auth, Group, Replies, Scope und User, unterscheiden sich von den ursprünglichen, von Hand erstellten Klassen darin, dass sie für jedes Attribut eine Accessor- und Mutator-Methode enthalten sowie Methoden, die für die Serialisierung in Apache SOAP gebraucht werden. Zusätzlich zu den generierten Java Klassen wird mit WSDL2Java ein Deployment Descriptor (deploy.wsdd) zum Bereitstellen des Web Services in einem Servlet Container, wie Apache Tomcat, sowie ein Undeployment Descriptor (undeploy.wsdd) zum Entfernen des Web Services erzeugt. Bereitstellen des Web ServicesNachdem die einzelnen Methoden der serverseitigen Klasse (skeleton) entsprechend implementiert wurden, sind für das Bereitstellen des Annotation Web Services auf einem Servlet Container wie z.B. Tomcat folgende Schritte notwendig:
zu 1: In dem Verzeichnis $CATALINA_HOME/webapps/axis/WEB-INF/classes/ ein Verzeichnis mit dem Namen aws erstellen und alle Klassendateien in dieses Verzeichnis kopieren. zu 2: Zum Registrieren des Web Services muss Tomcat gestartet werden. Mit folgendem Befehl wird der Web Service in den Applikationsserver eingebunden:
Unter http://localhost:8080/axis/servlet/AxisServlet müsste jetzt der Annotation Web Service mit seinen zugehörenden Methoden aufgelistet sein (ggf. Tomcat neu starten, damit die Änderungen wirksam werden). Zugriff auf den Web ServiceDas folgende kleine Codefragment zeigt, wie auf den Annotation Web Service zugegriffen werden kann (kompletter Code): ... public static void main(String[] args) { Auth auth = new Auth(); auth.setUserID("Fred"); auth.setPassword("secret"); Annotation ann = new Annotation(); ... try { AwsService awsService = new AwsServiceLocator(); Aws aws = awsService.getAws( new java.net.URL("http://localhost:8080/axis/services/Aws")); aws.createUser("Fred", "secret"); aws.addAnnotation(auth, ann); } catch (Exception e) { System.err.println("Exception occured " + e.getMessage()); } } ... Wie man sieht kommuniziert das Java-Programm mit dem Server, indem es eine Instanz der Stub-KIasse verwendet. Der Benutzer braucht lediglich die Java Schnittstelle zu betrachten und kann den Web Service wie eine lokale Instanz dieser Klasse verwendet. Links
|