Типы w ++ c ++ gSOAP - PullRequest
       50

Типы w ++ c ++ gSOAP

1 голос
/ 21 декабря 2011

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

1 голос
/ 21 декабря 2011

Я попытался написать несколько файлов 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>
...