Типы w ++ C++ gSOAP
Я работаю над файлом.wsdl, чтобы определить сервис для gSOAP. В одном из запросов службы я хочу использовать пользовательский тип как часть запроса, но не могу понять его правильно и не знаю, в чем проблема:
<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.wsdl
fileInfo
член будет определен как строка, и я получу следующее предупреждение:
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 вместо того, чтобы делать это наоборот.
Если это невозможно, я бы посоветовал взглянуть на эту ветку. Я думаю, что если вы измените свою схему на что-то вроде этого, это может сработать:
<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>