SOAP
Willemers Informatik-Ecke
SOAP (ursprünglich Simple Object Access Protocol) ist ein Netzwerkprotokoll, das in der Regel das Web-Protokoll HTTP verwendet, um Daten im XML-Format auszutauschen.

SOAP-Anwendungen funktionieren im Sinne eines Remote Procedure Calls (RPC). Das bedeutet, dass der Server Methoden im Netzwerk zur Verfügung stellt, die von anderen Computern des Netzwerk als Client aufgerufen werden können.

Für Client und Server wird aus einer WSDL-Beschreibung (Web Services Description Language) ein Interface festgelegt. WSDL basiert auf XML. Es ist möglich, aus einer WSDL-Definition ein Java-Interface zu generieren. Es ist aber auch möglich, aus einem Java-Interface eine WSDL zu generieren.

Ein SOAP-Server unter Eclipse

  1. Erzeuge ein Dynamic Web Project. File | New | Dynamic Web Project
  2. Wenn Tomcat als Application Server dient, müssen die Jersey-Bibliotheken zum Projekt hinzugebunden werden.

    Laden Sie die Jersey-Jars aus dem Internet unter der URL jersey.java.net/download.html. In der ZIP-Datei jaxrs-ri-XXXX.zip befinden sich in den Unterverzeichnissen api, lib und ext mehrere Jar-Dateien. Kopieren Sie die Dateien in das Projektverzeichnis WebContent/WEB-INF/lib.

    Nun klicken Sie das Projekt mit der rechten Maustaste und wählen Properties. Unter Java Build Path klicken Sie Add JARs und fügen die Jersey-Jar-Dateien aus dem Projektpfad hinzu.

  3. Die Klasse, deren Methoden später vom Client aufgerufen werden soll, wird angelegt. Diese Klasse bildet die Server-Schnittstelle.
    public class Hallo {
        public String sagHallo(String name) {
            return "Hallo, " + name;
        }
    }
    
    Es können natürtlich auch weitere Methoden in die Klasse geschrieben werden.
  4. Daraus erstellt Eclipse die WSDL, den Server und ggf. sogar den Client. Dazu klicken Sie mit der rechten Maustaste auf Projekt und wählen New|Other. Es erscheint ein Dialog. Dort finden Sie unter Web Services den Punkt Web service. Mit Next kommen Sie weiter. Abbildung 1 zeigt den Folgedialog.


    Abbildung 1: Einstellen des Webservice

  5. Hier müssen Sie als Service Implementation Ihre Klasse Hallo eintragen. Sie finden die korrekte Bezeichnung am einfachsten über den Button Browse.


    Abbildung 2: Auswahl der Serverklasse.

    Es erscheint eine lange Liste von Kandidaten. Geben Sie den Namen der Klasse, also Hallo, in das Suchfeld ein. Wählen Sie Ihre Klasse und klicken Ok.

  6. Nun erscheint wieder der Dialog, dieses Mal ist die Implementation gefüllt. Die beiden Regler links ziehen Sie hoch auf Test service und Test client.
  7. Klicken Sie Finish und Eclipse bekommt Zuckungen. Keine Angst: Das geht vorbei.
  8. Eclipse hat zusätzlich ein Client-Projekt erzeugt. Dieser wurde zum Test gleich gestartet, wie in Abbildung 3 zu sehen.


    Abbildung 3: Testbildschirm

    In dem linken Fenster unter Methods sehen Sie die Methoden, die der Server anbietet. Die einzige Methode, die Sie selbst gebaut haben, ist sagHallo.

  1. Wenn Sie den Link von sagHallo unter Methods anklicken, erscheint auf der rechten Seite unter Inputs eine Eingabezeile mit zwei Buttons.
  2. Geben Sie einen Namen in die Eingabezeile und klicken Sie Invoke.
  3. Im dritten Fenster erscheint unter Result die erwartete Meldung "Hallo Anton".

Erzeugen eines Clients

Der Server steht, nun soll ein Java-Client erstellt werden, der auch ohne Tomcat auskommen soll. In den meisten Fällen soll ein normales Programm den Kontakt zum SOAP-Server aufnehmen, seine Anfrage stellen, die Ergebnisse auswerten und dann weiterlaufen.

Um einen solchen von Tomcat unabhängigen Client zu erzeugen, erstellen Sie ein einfaches Java-Projekt. Eclipse unterstützt Sie darin, dass es innerhalb des Projekts den Rahmen für einen Web-Service-Client erzeugen kann. Auf diese Weise ersparen Sie sich den Umgang mit dem HTTP-Protokoll und der lästigen Umcodierung, sondern rufen den Server auf die gleiche Weise, wie Sie eine gewöhnliche Methode aufrufen würden.

  1. Neues Java-Projekt anlegen. File|New Java-Project. Suchen Sie sich einen Namen aus, beispielsweise SimpleSoapJavaClient.
  2. Nun erstellen Sie den Web-Service-Client. Dazu klicken Sie das Projekt mit der rechten Maustaste an und wählen New|Other.
  3. Dort finden Sie unter Web Services den Punkt Web Service Client. Wählen Sie in an und klicken Sie Next. Der Dialog sieht sehr ähnlich aus wie in Abbildung 1, enhält aber dieses Mal nur den Client-Typ.
  4. Unter Service definition muss der Server eingetragen werden, genauer seine WSDL-Datei. Dazu klicken Sie auf Browse.
  5. Es erscheint ein Dialog, der Ihnen die Web Service-Projekte der Arbeitsumgebung von Eclipse anzeigt. Sie klappen Ihren Server -- hier SimpleSoap -- auf und wählen unter WebContent|wsdl die Datei Hallo.wsdl an, das die Informationen für die Serverklasse Hallo enthält.
  6. Sie bestätigen die Wahl mit OK und auch den vorherigen Dialog mit OK und landen wieder im Dialog Web Service Client.
  7. Schließen Sie den Dialog mit Finish. Daraufhin erstellt Eclipse eine Schnittstelle zum Web Service. Sie finden die enstsprechenden Java-Klassen im Ordner src.
  8. Erstellen Sie eine normale Java-Klasse, indem Sie das Projekt mit der rechten Maustaste anklicken und New|Class anwählen.
    package de.willemer.webservice;
    
    public class JavaHalloClient {
    
        public static void main(String[] args) {
            try {
                HalloServiceLocator locator = new HalloServiceLocator();
                Hallo gruss = locator.getHallo();
                if (gruss == null) {
                    System.out.println("port ist null");
                }
                String name = "Anton";
                String response = gruss.sagHallo(name);
                System.out.println(response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
  9. Versichern Sie sich, dass der Server gestartet ist.
  10. Klicken Sie die Datei JavaHalloClient im Projekt SimpleSoapJavaClient mit der rechten Maustaste an.
  11. Wählen Sie Run As|Java Application.
  12. In der Konsole erscheit die Meldung "Hallo Anton".
In der Klasse HalloServiceLocator finden Sie übrigens die URL Ihres Web Services in der Variablen Hallo_address. Wenn Sie den Server über das Netzwerk ansprechen wollen, muss diese Adresse natürlich so angepasst werden, dass Sie nicht mehr localhost, sondern den Namen des Servers enthält.