Типы 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>
Другие вопросы по тегам