gSOAP: C/C++ Web Services and Clients
gSOAP: User Guide


Inhaltsverzeichnis



Voraussetzung zur Erstellung des Axis Webservices

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


  • Erstellung des Axis Webservices

    1) Erstellen der WSDL-Datei
    Die WSDL-Datei <TextService.wsdl> kann von Hand oder mit Hilfe eines Werkzeugs zur WSDL-generierung erstellt werden.


    2) Erstellen der serverseitigen Klassen
    Befehl: java org.apache.axis.wsdl.WSDL2Java --server-side --skeletonDeploy true TextService.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 in dem durch den Namensraum festgelegten Verzeichnis. Das Beispiel Webservices mit Apache Axis erlärt detaillierter wie ein Service erstellt und deployt wird.


    3) Implementieren des Webservices
    Die Metodenrümpfe der vom Axis-Compiler automatisch erzeugten Klasse TextServiceSoapBindingImpl.java sind leer und müssen implementiert werden.


    Erstellung des gSOAP Clients

    1) Erstellen der Headerdatei
    Mit dem WSDL-Parser wsdl2h die Headerdatei gSoapTextClient.h erzeugen. Dazu ist es notwendig, die WSDL-Datei des zuvor erstellten Axis-Webservices vom Tomcat-Webserver abzufragen.

    Befehl: wsdl2h -o gSoapTextClient.h http://localhost:8080/axis/services/TextService?wsdl

    Die Methode processData muss dementsprechend verändert werden, dass als Parameter Pointer oder Referenzen übergeben werden. (processData(std:string *request, std:string *response))


    2) Erzeugen der für den Client notwendigen Stub- und Skeleton-Klassen
    Die Implementierung einer SOAP-Clientanwendung benötigt für jede entfernte Methode, die der Client aufrufen soll eine Stub-Routine. Diese Stub-Klassen werden automatisch durch den Stub- und Skeleton-Compiler der gSOAP-Bibliothek soapcpp2 erzeugt.

    Befehl: soapcpp2 -I/<gsoap-path> gSoapTextClient.h


    3) Implementierung der Client-Klasse

            #include gSoapTextClient.nsmap
    	...
            // service address
    	const char server[] = "http://localhost:8080/axis/services/TextService";
    
    
    	main() {
    	    struct soap soap;
    	    soap_init(&soap); 
    	    
    	    // read input
    	    ifstream infile ... 
    
    	    // remote call
    	    int responseflag = soap_call___ns1__processData(&soap, server, "", requestData, &responseData);
    	    	...
    	}
       

    4) Kompilieren der Client-Klasse
    Befehl:

    g++ -Wno-deprecated -I/<gsoap-path> -o  gSoapTextClient gSoapTextClient.cpp soapC.cpp soapClient.cpp <gsoap-path>/stdsoap2.cpp


    5) gSOAP Client starten
    Der gSOAP Client kann durch Aufruf der Objektdatei gestartet werden.

    Befehl: gSoapTextClient -i ExampleOutput_RDF