Apache Axis


Inhaltsverzeichnis



Voraussetzung zur Erstellung von Webservices

  • Linux Betriebssystem
  • Java jdk 1.5
  • Apache Axis 1.3 [download]
  • Tomcat 5.5.9 (Diese Anleitung nimmt an, dass der Tomcat Server auf Port 8080 läuft.)


  • Installation von 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=/commons-logging.jar
    export CLASSPATH=/saaj.jar
    export CLASSPATH=/axis-ant.jar
    export CLASSPATH=/jaxrpc.jar
    export CLASSPATH=/axis.jar
    export CLASSPATH=/log4j-1.2.8.jar
    export CLASSPATH=/commons-discovery.jar
    export CLASSPATH=/wsdl4j.jar


    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=/activation.jar
    export CLASSPATH=/mail.jar


    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.




    Erstellung der Webservices mit WSDL2Java

    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.



    SOAPMonitor und TCPMonitor zur Visualisierung der Nachrichtenkommunikation

    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