2013-10-21 42 views
0

我从一组XML示例请求文件为XML Web服务生成了一个XSD(使用Xmplify - 但我怀疑这很重要)。gsoap不生成C++代理类

当我通过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?

如何获取生成的代理文件?我知道我可以使用没有代理对象,但它看起来更杂乱!

Schema doc包含在下面。

感谢您的任何建议!

菲尔。

<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

的wsdl2h工具不会生成XSD文件的代理和服务代码,因为没有这些(仅在WSDL)定义的操作。您可以使用gSOAP生成的(de)序列化程序为XSD根元素发送/ recv从C++数据类型中(除)序列化的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 

您可以发送/过流recv的数据,插座等