gSOAP: C/C++ Web Services and Clients |
gSOAP: User Guide |
Erstellung eines Axis Webservices und eines gSOAP-Clients |
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.
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
Inhaltsverzeichnis |
DFKI GmbH German Research Center for Artificial Intelligence |