我已经从一组XML Web服务的示例请求文件生成了XSD(使用Xmplify - 但我怀疑这很重要)。
当我通过gsoap运行时,我没有得到任何错误或警告,但即使在soapcpp2上使用-i或-j选项,我也没有生成C ++代理文件(例如soapProxy.h)。
仅生成以下文件:
ns1.nsmap
request.h
soapC.cpp
soapH.h
soapStub.h
使用的命令:
wsdl2h request.xsd
soapcpp2 -i -C -I/usr/local/share/gsoap/import request.h
我认为有一些特定的XSD需要生成这些?
如何生成代理文件?我知道我可以在没有代理对象的情况下使用它,但它看起来更麻烦!
架构文档包含在下面。
感谢您的任何建议!
菲尔。
<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>
答案 0 :(得分:0)
wsdl2h工具不会为XSD文件生成代理和服务代码,因为这些文件中没有定义任何操作(仅在WSDL中)。您可以使用gSOAP生成的(de)序列化程序为XSD根元素发送/ recv从C ++数据类型(de)序列化的XML数据。例如
#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
您可以通过流,套接字等发送/接收数据