2011-12-21 43 views
1

我正在处理.wsdl文件以定义gSOAP服务。在服务的请求中的一个,我想用一个用户定义类型的请求的一部分,但我无法得到它的权利,不知道是什么问题:C++ gSOAP wsdl类型

<definitions name="Uploader" 
    targetNamespace="http://192.168.2.113/uploader/uploader.wsdl" 
    xmlns:tns="http://192.168.2.113/uploader/uploader.wsdl" 
    [...]> 
[...] 
<types> 
    <schema targetNamespace="http://192.168.2.113/uploader/uploader.wsdl" 
     xmlns="http://www.w3.org/2001/XMLSchema"> 

     <element name="FileInformation"> 
      <complexType><all> 
       <element name="sFilename" type="string"/> 
       <element name="bDirectory" type="boolean"/> 
      </all></complexType> 
     </element> 

     [...] 

     <element name="UploadRequest"> 
      <complexType><all> 
       <element name="fileInfo" type="tns:FileInformation"/> 
      </all></complexType> 
     </element> 

     [...] 

    </schema> 
</types> 
[...] 
</definitions> 

当我尝试产生出它与wsdl2h -o Uploader.h http://192.168.2.113/uploader/uploader.wsdlfileInfo成员将被定义为一个字符串的头文件,我得到以下警告:

Warning: could not find element 'fileInfo' type '"http://192.168.2.113/uploader/uploader.wsdl":FileInformation' in schema http://192.168.2.113/uploader/uploader.wsdl 

回答

1

我试着写了几WSDL文件我自己,但是我发现他们是非常难以正确使用,主要是因为XML名称空间,所以我建议您使用C++编写类并生成WSDL文件auto从他们身上取而代之,而不是以相反的方式进行。

如果这是不可能的,我会建议看看这个thread。我认为,如果你改变你的架构为这样的东西,它可能会工作:

<definitions name="Uploader" 
targetNamespace="http://192.168.2.113/uploader/uploader.wsdl" 
xmlns:tns="http://192.168.2.113/uploader/uploader.wsdl"> 

<types> 
    <schema targetNamespace="http://192.168.2.113/uploader/uploader.wsdl" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 

     <xsd:element name="FileInformation" type="tns:FileInformation" /> 
     <xsd:complexType name="FileInformation"> 
      <xsd:all> 
       <xsd:element name="sFilename" type="string"/> 
       <xsd:element name="bDirectory" type="boolean"/> 
      </xsd:all> 
     </xsd:complexType> 

     <xsd:element name="UploadRequest" type="tns:UploadRequest"/> 
     <xsd:complexType name="UploadRequest"> 
      <xsd:all> 
       <xsd:element name="fileInfo" type="tns:FileInformation"/> 
      </xsd:all> 
     </xsd:complexType> 

    </schema> 
</types> 
</definitions> 
+0

完美,谢谢一堆。是的,我真的应该开始使用生成的文件。我想我会更好地理解SOAP,前提是我自己先做这样的事情。 – nijansen 2011-12-21 14:12:19

+0

不客气!我自己经历过你的问题并相信我,编写WSDL文件你的自我可能非常复杂...... – Felipe 2011-12-21 14:16:44