Phil
Phil

Reputation: 642

gsoap does not generate C++ proxy classes

I've generated an XSD from a set of example request files for an XML web service (using Xmplify - but I doubt that's important).

When I run this through gsoap, I get no errors or warnings, but even with -i or -j option on soapcpp2, I get no C++ proxy files generated (eg soapProxy.h).

Only the following files are generated:

ns1.nsmap   
request.h
soapC.cpp
soapH.h
soapStub.h

Commands used:

wsdl2h request.xsd 
soapcpp2 -i -C -I/usr/local/share/gsoap/import request.h

I figure there is something specific about the XSD required in order to generate these?

How do I get the proxy files generated? I know I can use without proxy objects, but it looks a lot more messy!

Schema doc is included below.

Thanks for any advice!

Phil.

<xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' elementFormDefault='unqualified'>
    <xs:element name='REQUEST'>
        <xs:complexType>
            <xs:sequence>
                <xs:element ref='USERTOKEN'/>
                <xs:element ref='ACTION'/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name='USERTOKEN'>
        <xs:complexType>
            <xs:sequence>
                <xs:element ref='USERKEY'/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name='USERKEY' type='xs:NCName'/>
    <xs:element name='ACTION'>
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs='0' ref='PARAMETER'/>
            </xs:sequence>
            <xs:attribute name='NAME' use='required' type='xs:NCName'/>
        </xs:complexType>
    </xs:element>
    <xs:element name='PARAMETER'>
        <xs:complexType mixed='true'>
            <xs:attribute name='NAME' use='required' type='xs:NCName'/>
        </xs:complexType>
    </xs:element>
</xs:schema>

Upvotes: 0

Views: 1034

Answers (1)

Dr. Alex RE
Dr. Alex RE

Reputation: 1708

The wsdl2h tool does not generate proxy and service code for XSD files, since there are no operations defined in these (only in WSDL). You can use the gSOAP-generated (de)serializers for the XSD root elements to send/recv XML data that is (de)serialized from the C++ data types. For example

#include "ns1.nsmap" // ns1 namespaces etc
struct soap *ctx = soap_new();
ns1__REQUEST r;
r.soap_default(ctx); // reset content
r.USERTOKEN = … // set r's content as needed
ctx.os = … // set the output stream
soap_write_ns1__REQUEST(ctx, &r); // serialize REQUEST

You can send/recv data over streams, sockets, etc.

Upvotes: 1

Related Questions