How to use gSOAP with Qt for Web Service Client: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
 
(Simplify punctuation)
 
(6 intermediate revisions by 4 users not shown)
Line 1: Line 1:
=Overview=


gSOAP is a portable development toolkit for C and C++ <span class="caps">XML</span> Web services and <span class="caps">XML</span> data bindings. It supports <span class="caps">XML</span> auto-serialization of C/C++ data. Includes <span class="caps">WSDL</span>/XSD schema binding tools, stub/skeleton compiler, Web server, <span class="caps">SOAP</span>/XML/MIME streaming, <span class="caps">XML</span>-<span class="caps">RPC</span>. Here is how to use it to build a web service client in Qt.
[[Category:Developing_with_Qt]]
[[Category:HowTo]]


==Preparation==


* Download and unzip the [http://sourceforge.net/projects/gsoap2/ gSOAP package] ''[sourceforge.net]''.
= Overview =


gSOAP package contains pre-built tools in the <code>gsoap/bin</code> directory.
gSOAP is a portable development toolkit for C and C++ XML Web services and XML data bindings. It supports XML auto-serialization of C/C++ data. Includes WSDL/XSD schema binding tools, stub/skeleton compiler, Web server, SOAP/XML/MIME streaming, XML-RPC. Here is how to use it to build a web service client in Qt.
 
== Preparation ==
 
* Download and unzip the [http://sourceforge.net/projects/gsoap2/ gSOAP package].
 
gSOAP package contains pre-built tools in the '''gsoap/bin''' directory.


* <code>wsdl2h</code> schema importer
* <code>wsdl2h</code> schema importer
Line 14: Line 19:
You require <code>.wsdl</code> and <code>.xsd</code> files of the web service to generate a c++ stub.
You require <code>.wsdl</code> and <code>.xsd</code> files of the web service to generate a c++ stub.


==Modify your project==
== Modify your project ==


* First use <code>wsdl2h</code> on a .wsdl file to generate a .h file, then use <code>soap2cpp</code> on the generated .h file to generate .h and .cpp files to be included in your Qt project.
* First use <tt>wsdl2h</tt> on a .wsdl file to generate a .h file, then use <tt>soap2cpp</tt> on the generated .h file to generate .h and .cpp files to be included in your Qt project.
* Before using <code>wsdl2h</code> you have to modify the <code>typemap.dat</code> file, this file is present in <code>gsoap/ws</code> directory. Add a line in this file defining the namespace of your web service. Give any name to <code>namespace</code> and copy string from your .wsdl file following the tag.
* Before using <tt>wsdl2h</tt> you have to modify the <tt>typemap.dat</tt> file, this file is present in <tt>gsoap/ws</tt> directory. Add a line in this file defining the namespace of your web service. Give any name to <tt>namespace</tt> and copy string from your .wsdl file following the tag.


Add this line to <code>typemap.dat</code> file:
<code><definitions targetNamespace=http://something></code>


* Now run <code>wsdl2h</code> on .wsdl and .xsd files (from command prompt)
Add this line to <tt>typemap.dat</tt> file:
 
<code>Anything ="http://something"</code>
 
* Now run <tt>wsdl2h</tt> on .wsdl and .xsd files (from command prompt)
 
<code>wsdl2h –s -t<path of typemap.dat> –o <name of generated .h file e.g chatpp.h> <path and name of .wsdl file></code>


(note .xsd file should be in same directory as .wsdl file)
(note .xsd file should be in same directory as .wsdl file)


* Then use <code>soapcpp2</code> on generated .h file (we assume that name of generated file is chatapp.h)
* Then use <tt>soapcpp2</tt> on generated .h file (we assume that name of generated file is chatapp.h)
 
<code>soapcpp2 –i chatpp.h</code>


this will generate multiple files
this will generate multiple files
<code>soapstub.h
soapH.h
soapC.cpp
soapchatappProxy.h
soapchatappProxy.cpp
chatapp.nsmap
soapchatappsetvice.h
soapchatappservice.cpp</code>


and an xml file for each method in defined in .wsdl file.
and an xml file for each method in defined in .wsdl file.


* now add
* now add
<code>soapstub.h
soapH.h
soapchatappProxy.h</code>


as headers in to your qt project and then add
as headers in to your qt project and then add
<code>soapC.cpp
soapchatppProxy.cpp</code>


as source
as source


* add include path of yor generated file in .pro file of your qt project or simply copy all of generated files to your project directory. Also add path of “libws2_32.a” in your .pro file I my case it is as under
* add include path of yor generated file in .pro file of your qt project or simply copy all of generated files to your project directory. Also add path of "libws2_32.a" in your .pro file I my case it is as under
 
<code>LIBS += C:/NokiaQTSDK/mingw/lib/libws2_32.a</code>


* also add stdsoap2.h and stdsoap2.cpp from gsoap directory as header and source in your project.
* also add stdsoap2.h and stdsoap2.cpp from gsoap directory as header and source in your project.
Line 46: Line 77:


''above method worked for me while using gsoap with NokiaQtSDk on windows xp.''
''above method worked for me while using gsoap with NokiaQtSDk on windows xp.''
===Categories:===
* [[:Category:Developing with Qt|Developing_with_Qt]]
* [[:Category:HowTo|HowTo]]

Latest revision as of 13:21, 23 August 2015


Overview

gSOAP is a portable development toolkit for C and C++ XML Web services and XML data bindings. It supports XML auto-serialization of C/C++ data. Includes WSDL/XSD schema binding tools, stub/skeleton compiler, Web server, SOAP/XML/MIME streaming, XML-RPC. Here is how to use it to build a web service client in Qt.

Preparation

gSOAP package contains pre-built tools in the gsoap/bin directory.

  • wsdl2h
    
    schema importer
  • soap2cpp
    
    stub/skeleton generator.

You require

.wsdl

and

.xsd

files of the web service to generate a c++ stub.

Modify your project

  • First use wsdl2h on a .wsdl file to generate a .h file, then use soap2cpp on the generated .h file to generate .h and .cpp files to be included in your Qt project.
  • Before using wsdl2h you have to modify the typemap.dat file, this file is present in gsoap/ws directory. Add a line in this file defining the namespace of your web service. Give any name to namespace and copy string from your .wsdl file following the tag.
<definitions targetNamespace=http://something>

Add this line to typemap.dat file:

Anything ="http://something"
  • Now run wsdl2h on .wsdl and .xsd files (from command prompt)
wsdl2h s -t<path of typemap.dat> o <name of generated .h file e.g chatpp.h> <path and name of .wsdl file>

(note .xsd file should be in same directory as .wsdl file)

  • Then use soapcpp2 on generated .h file (we assume that name of generated file is chatapp.h)
soapcpp2 i chatpp.h

this will generate multiple files

soapstub.h
soapH.h
soapC.cpp
soapchatappProxy.h
soapchatappProxy.cpp
chatapp.nsmap
soapchatappsetvice.h
soapchatappservice.cpp

and an xml file for each method in defined in .wsdl file.

  • now add
soapstub.h
soapH.h
soapchatappProxy.h

as headers in to your qt project and then add

soapC.cpp
soapchatppProxy.cpp

as source

  • add include path of yor generated file in .pro file of your qt project or simply copy all of generated files to your project directory. Also add path of "libws2_32.a" in your .pro file I my case it is as under
LIBS += C:/NokiaQTSDK/mingw/lib/libws2_32.a
  • also add stdsoap2.h and stdsoap2.cpp from gsoap directory as header and source in your project.
  • now include chatapp.nsmap and chatappProxy.h in your main.cpp.
  • make an object of chatappProxy and use it to communicate with webservice.

above method worked for me while using gsoap with NokiaQtSDk on windows xp.