C++ gSOAP wsdl-типы

Я работаю над файлом .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

person nijansen    schedule 21.12.2011    source источник


Ответы (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>
person Felipe    schedule 21.12.2011
comment
Отлично, большое спасибо. Да, я действительно должен начать использовать сгенерированные файлы. Я думаю, что лучше понял бы SOAP, если бы сначала сам делал такие вещи. - person nijansen; 21.12.2011
comment
Пожалуйста! Я сам разобрался с вашей проблемой и поверьте мне, писать файлы WSDL самостоятельно может быть очень сложно... - person Felipe; 21.12.2011