Webservices mit Apache Axis |
1) Download und Entpacken
Die Axis Distributionsdatei (.zip., .tgz) downloaden und auspacken.
2) Server stoppen
Wenn der Tomcat-Server läuft, diesen stoppen:
$tomcat-verzeichnis/bin> /bin/sh shutdown.sh
3) Kopieren der Verzeichnisse
Das Verzeichnis 'webapps/axis' der entpackten Axis Distributionsdatei in das
Verzeichnis des Tomcat-Servers, nach $CATALINA_HOME/webapps, kopieren. Der
Tomcat-Ordner 'webapps' bleibt erhalten. Nur die
Axis Daten hinzufügen.
Das kopierte Axisverzeichnis beinhaltet ein Subverzeichnis mit dem Namen 'WEB-INF'.
Dieses Verzeichnis enthält Konfigurationsdaten und die eigentlichen Web Services.
4) Pfade zu den Bibliotheken setzen
Der Einfachheit halber können alle Bibliotheken in das Tomcatverzeichnis
<webapps/axis/WEB-INF/lib> kopiert werden.
Dann die CLASSPATH Variable um den Pfad zu diesen Bibliotheken ergänzen:
export CLASSPATH=
export CLASSPATH=
export CLASSPATH=
export CLASSPATH=
export CLASSPATH=
export CLASSPATH=
export CLASSPATH=
export CLASSPATH=
5) Tomcat starten
Befehl:
$tomcat-verzeichnis/bin> /bin/sh startup.sh
6) Axis Startseite
Als Tomcat-Manager einloggen. Es müsste nun ein Verzeichnis 'axis ' zu sehen sein.
Bei Bedarf können hier die Klassen neu geladen werden.
Von hier aus kann über den Link 'axis' oder über Eingabe der URL 'http://127.0.0.1:8080/axis/'
zur Axis-Startseite gewechselt werden. (Beachten Sie, dass die Portangabe des Tomcat-Servers abweichen kann.)
7) Überprüfung der Axiskomponenten (Bibliotheken)
Zur Überprüfung, ob die Konfiguration vollständig ist muss zur Seite
'http://localhost:8080/axis/happyaxis.jsp' gewechselt werden. Diese HappyAxis Seite wird ausgehend
von der Axis-Startseite über den Link 'Validate the local installation's configuration' erreicht.
Diese Seite zeigt die Verfügbarkeit der notwendigen und optionalen
Komponenten an. Alle Kernkomponenten müssen installiert sein, damit Axis verwendet werden kann.
Pakete können hier nachgeladen werden:
JavaBeans Activation Framework
JavaMail
Die nachgeladenen Bibliotheken in den Klassenpfad aufnehmen:
export CLASSPATH=
export CLASSPATH=
8) Anzeige verfügbarer Dienste
Ausgehend von der Axis-Startseite wird über den Link 'View the list of deployed Web services'
die Seite 'http://localhost:8080/axis/servlet/AxisServlet' erreicht, die alle verfügbaren
Dienste anzeigt.
Es sollen drei Services erstellt werden. Die Erstellung aller Services
erfolgt nach folgendem Muster:
1) Die WSDL-Datei
Kopieren einer WSDL-Datei (Web Service Definition Language) SemanticMediator.wsdl
in ein lokales Verzeichnis.
2) Erstellung der clientseitigen Klassen
Befehl> java org.apache.axis.wsdl.WSDL2Java SemanticMediator.wsdl
Eine Verzeichnisstruktur gemäß dem in der WSDL-Datei eingestellten Namensraum
wird automatisch erstellt. Die Klassen (Stub, Locator und Interfaces) werden dort gespeichert.
3) Erstellung der serverseitigen Klassen
Befehl> java org.apache.axis.wsdl.WSDL2Java --server-side --skeletonDeploy true SemanticMediator.wsdl
Die Option 'skeletonDeploy true' veranlasst das
Erzeugen einer Skeleton Klasse. Diese Klasse wird zur Dekodierung und
Rekonstruktion der Daten auf der Serverseite benötigt.
Die erzeugten serverseitigen Klassen (Skeleton und Service) stehen ebenfalls
in dem durch den Namensraum festgelegten Verzeichnis.
4) Erstellung eines eigenen Clients
Die Clientklasse wird nicht automatisch erzeugt. Folgender Code dient dem
Aufruf des entfernten Webservices. Der Methodenname wurde in der WSDL-Datei festgelegt.
public class DialogClient { ... // Make a service SemanticMediator service = new SemanticMediatorLocator(); // use the service to get a stub which implements the SDI ProcessData port = service.getSemanticMediator(); Object o = port.processData(xmlDocument); ... }
5) Implementierung des Dienstes
Der Dienst SemanticMediatorSoapBindingImpl.java wird von WSDL2Java erzeugt. Der Body der Methode 'processData'
muss nun implementiert werden. Zum Testen reicht es schon aus, anstatt null das übergebene Objekt zurückzugeben.
6) Deployment
Kompilieren der einzelnen Klassen. Einfacher ist es, wenn als Ziel ein build
Verzeichnis angegeben wird. Die in diesem Verzeichnis erstellte Verzeichnisstruktur,
hier das Verzeichnis 'org/' mit allen class-Dateien, in das Tomcatverzeichnis 'webapps/WEB-INF/classes/'
kopieren. Ausserdem im Tomcat Manager die Klassen 'Neu laden'.
Zum Bereitstellen der Dienste muss für den jeweiligen Dienst die
jeweilige WSDD-Datei (Web Service Deployment Descriptor) aufgerufen
werden. Diese WSDD-Dateien wurden ebenfalls durch das WSDL2Java Werkzeug erzeugt und im Verzeichnis
des jeweiligen Dienstes abgelegt.
Deployment-Befehl:
> java org.apache.axis.client.AdminClient
-lhttp://localhost:8080/axis/services/AdminService deploy.wsdd
(Beachten Sie, dass die Portangabe des Tomcat-Servers abweichen kann.)
7) Verwendung der Dienste
Mit dem Aufruf des Clients aus dem localen Verzeichnis kann dann jetzt der Dienst verwendet werden.
Das Axis Framework bietet Werkzeuge, die es dem Entwickler ermöglichen den Nachrichtenaustausch zu beobachten. Im synchronen Fall handelt es sich um Request-Response-Paare, die zwischen den Clients und den Web Diensten hin- und hergesendet werden.
Axis verfügt über zwei Werkzeuge, SOAPMonitor und TCPMonitor, die eine Verfolgung der Nachrichtenkommunikation auf verschiedenen Ebenen ermöglichen.
Die verwendeten Web Services kommunizieren über SOAP (Simple Object Access Protocol). Die SOAP Requests und Responses können mit dem SOAPMonitor mitverfolgt werden. (zu finden unter: http://localhost:8080/axis/SOAPMonitor). Der SOAPMonitor ist als Service standardmäßig enthalten aber deaktiviert. Ein Applet mit Namen SoapMonitorApplet, über das die Anzeige im Browser erfolgt, wird als Java-Quellcode-Datei mitgeliefert. Dieses Applet kommuniziert über eine Socketverbindung über Port 5001 mit dem SoapMonitor-Service. Dieser Port kann aber auch in der Datei web.xml geändert werden.
Zur Aktivierung des SOAPMonitor-Service muss also auch die Klasse SoapMonitorApplet.java kompiliert werden. Die entstandenen .class Dateien können im Wurzelverzeichnis belassen werden. Abschließend muss noch der SOAPMonitor-Service in Axis eingebunden werden. Dies bewerkstelligt man am einfachsten mit dem AdminClient? und einer WSDD-Datei. SOAPMonitor kann nicht für Services verwendet werden, die über JWS installiert wurden.
Damit wurde das SOAPMonitor-Utility aktiviert. Damit aber nun tatsächlich SOAP-Nachrichten angezeigt werden können, muss der Web Service, der beobachtet werden soll, angewiesen werden, den SOAPMonitor-Handler zu durchlaufen. Durch Verwendung von <requestFlow> und <responseFlow> direkt nach dem <service> -Tag kann im Deployment Descriptor des gewünschten Web Service der SOAPMonitor eingebunden werden.
<deployment> <service name="SemanticMediator" provider="java:RPC"> style="document" use="literal" <requestFlow> <handler type="soapmonitor"/> </requestFlow> <responseFlow> <handler type="soapmonitor"/> </responseFlow> ... </deployment>
Ausserdem besteht die Möglichkeit die Nachricht auf der Transportebene mitzuverfolgen. Dies geschieht mit dem TCPMonitor. Damit Request und Response mitverfolgt werden können muss der TCPMonitor als Proxy gestartet werden. Er arbeitet als eine Art Relay Station. Er nimmt somit die Anfrage entgegen, loggt diese mit und leitet sie an den eigentlichen Service weiter. Beim Response funktioniert dies umgekehrt. Ein Starten des TCPMonitors erfolgt von der Kommandozeile mit dem folgenden Aufruf. Die Parameter sind optional und können auch in einer grafischen Benutzeroberfläche (GUI) eingetragen werden. Ziel ist der Web-Container, hier der Tomcat, auf dem der Service installiert ist.
Der wie folgt aufgerufen wird: java org.apache.axis.utils.tcpmon [listenPort targetHost targetPort]Im Entwicklungsstadium einer Anwendung kommt es oft vor, dass der TCPMonitor auf demselben Rechner wie der Service läuft, somit muss wie im nachfolgenden Beispiel ein anderer Port verwendet werden.
Beispiel: java org.apache.axis.utils.tcpmon 8088 localhost 8080
Inhaltsverzeichnis zurück |
DFKI GmbH German Research Center for Artificial Intelligence |