Genivia Home Documentation
XML Data Binding

updated Wed Jan 9 2019 by Robert van Engelen
 
XML Data Binding

SOAP/XML services use data bindings contractually bound by WSDL and auto- generated by wsdl2h and soapcpp2 (see Service Bindings). Plain data bindings are adopted from XML schemas as part of the WSDL types section or when running wsdl2h on a set of schemas to produce non-SOAP-based XML data bindings.

The following readers and writers are C/C++ data type (de)serializers auto- generated by wsdl2h and soapcpp2. Run soapcpp2 on this file to generate the (de)serialization code, which is stored in soapC.c[pp]. Include "soapH.h" in your code to import these data type and function declarations. Only use the soapcpp2-generated files in your project build. Do not include the wsdl2h- generated .h file in your code.

Data can be read and deserialized from:

  • an int file descriptor, using soap->recvfd = fd
  • a socket, using soap->socket = (int)...
  • a C++ stream (istream, stringstream), using soap->is = (istream*)...
  • a C string, using soap->is = (const char*)...
  • any input, using the soap->frecv() callback

Data can be serialized and written to:

  • an int file descriptor, using soap->sendfd = (int)...
  • a socket, using soap->socket = (int)...
  • a C++ stream (ostream, stringstream), using soap->os = (ostream*)...
  • a C string, using soap->os = (const char**)...
  • any output, using the soap->fsend() callback

The following options are available for (de)serialization control:

  • soap->encodingStyle = NULL; to remove SOAP 1.1/1.2 encodingStyle
  • soap_mode(soap, SOAP_XML_TREE); XML without id-ref (no cycles!)
  • soap_mode(soap, SOAP_XML_GRAPH); XML with id-ref (including cycles)
  • soap_set_namespaces(soap, struct Namespace *nsmap); to set xmlns bindings

Top-level root elements of schema "urn:address-book-example"

  • <a:address-book> _a__address_book
    // Reader (returns SOAP_OK on success):
    soap_read__a__address_book(struct soap*, _a__address_book*);
    // Writer (returns SOAP_OK on success):
    soap_write__a__address_book(struct soap*, _a__address_book*);
    // REST GET (returns SOAP_OK on success):
    soap_GET__a__address_book(struct soap*, const char *URL, _a__address_book*);
    // REST PUT (returns SOAP_OK on success):
    soap_PUT__a__address_book(struct soap*, const char *URL, _a__address_book*);
    // REST POST (returns SOAP_OK on success):
    soap_POST_send__a__address_book(struct soap*, const char *URL, _a__address_book*);
    soap_POST_recv__a__address_book(struct soap*, _a__address_book*);