Copyright R.A. van Engelen, FSU Department of Computer Science, 2000

 

SOAP C/C++ Stub and Skeleton Compiler Project Results

  • Web services are the newest and hotest Internet technology
  • >100 users of our gSOAP C/C++ Stub and Skeleton Compiler and growing...
  • Used in industry, research, education
  • Linux, Unix, Windows, Pocket PC, ...
  • Real-time applications
  • Project team:
    • Gunjan Gupta, Saurabh Pant, Dongmei Gao, Yunwei Wang

 

SOAP: Simple Object Access Protocol

  • SOAP is a remote procedure calling (RPC) protocol for the InternetDefine this term
  • Ideal for building client-server applications for business transactions
    • Xmethods
    • Microsoft's passport serviceDefine this term 
    • Windows XP professional is "SOAP enabled"
  • SOAP has simple "lightweight" design based on existing Internet technology:
    • XML marshalling formatDefine this term
    • HTTP transport

 

Building Web Services With SOAP

  • SOAP clients and servers can be written in a multitude of programming languages
    • C/C++ e.g. using our SOAP C/C++ Stub and Skeleton Compiler
    • Java
    • Perl
    • Visual Studio .NET
    • Any language for which an XML parser is available
  • SOAP distributed applications are not hampered by firewall problems
  • Security, encryption, and compression issues are left to HTTP

 

Why XML?

  • XML is a platform-independent object representation
  • A person record containing a name, date of birth, and address may be represented as:

  • <person>
      <name>Joe Smith</name>
      <dob>12/29/1967</dob>
      <address>
        <street>Main st.</street>
        <number>10</number>
        <city>London</city>
      </address>
    </person>
  • An XML element has an opening tag <...> followed by the XML content, which typically is a number of XML elements or some data, followed by a closing tag </...>
  • XML can be translated to HTML for viewing in a Web browser, for example
  • Name Joe Smith
    Date of birth 12/29/1967
    Address Main st. 10
    London
  • SOAP adopts XML for HTTP-based data transport between client-server applications

 

Project: SOAP C/C+ Stub and Skeleton Compiler

  • A stub is a routine that delegates the procedure work to be done to a remote site
  • A stub compiler automatically generates stubs 
  • Example SOAP C/C++ Stub Compiler input:

  • struct Address
    { char *street;
      int number;
      char *city;
    };
    struct Person
    { char *name;
      char *dob;
      struct Address address;
    };
    int getSS(struct Person p, long *SS);
    /* Retrieves and returns #SS for p from a database
       This function is implemented by the user
    */

 

Project (cont'd)

  • Compiler output:
    • A stub routine for the client:

    • soap_call_getSS(char *URL, char *action, struct Person p, long *SS);
      to invoke the database lookup for a person at the specified URL
    • A stub routine to implement the server:

    • soap_serve_getSS();
    • which listens to and serves incoming lookup requests by calling getSS() on the incomming person record
  • The resulting C/C++ client and server applications with SOAP are similar in functionality to Java RMI

 

Project: (cont'd)

  • Example SOAP client request:

  • <SOAP:Envelope xmlns:SOAP="urn:schemas-xmlsoap-org:soap.v1">
    <SOAP:Body>
     <getSS>
      <p>
       <name>Joe Smith</name>
       <dob>12</dob>
       <address>
        <street>Main st.</street>
        <number>10</number>
        <city>London</city>
       </address>
      </p>
     </getSS>
    </SOAP:Body>
    </SOAP:Envelope>
  • Example SOAP server response:

  • <SOAP:Envelope xmlns:SOAP="urn:schemas-xmlsoap-org:soap.v1">
    <SOAP:Body>
    <getSSResponse>
      <SS>999 99 9999</SS>
    </getSSResponse>
    </SOAP:Body>
    </SOAP:Envelope>

 
 
 

Open Student Projects

  • Implement a number of example SOAP clients and servers generated by our SOAP C/C++ Stub and Skeleton Compiler
  • Performance and network testing of applications
  • Add compression (e.g. with gzip) to C++ runtime
  • Add security (HTTPS/SSL) to C++ runtime
  • WSDL to C/C++ converter
  • Semantic mapping of data structures from one type into another type