2013-10-21 81 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的數據,插座等