gSOAP не возвращает информацию из веб-службы, а возвращает только схему

Я пытаюсь получить информацию о проекте из веб-службы Microsoft Project Server Project.

Я использую gSOAP для реализации клиента. Вот как выглядит мой код:

if ( project.ReadProjectStatus(&read_project_status_message, &read_project_status_response) == SOAP_OK )
{
    ofstream project_info("C:\\PROJECTINFO.XML");   
    project_info << read_project_status_response.ReadProjectStatusResult->__any;
}

Хотя ответ от сервера проекта выглядит так:

<soap:Envelope ...>
    <soap:Body ...>
        <ReadProjectStatusResponse ...>
            <ReadProjectStatusResult>
                <xs:schema ...>
                ...
                </xs:schema ...>
                <diffgr:diffgram ...>
                    <ProjectDataSet ...>
                    ....
                    </ProjectDataSet>
                </diffgr:diffgram>
            </ReadProjectStatusResult>
        </ReadProjectStatusResponse>
    </soap:Body>
</soap:Envelope>                   

когда я открываю файл PROJECTINFO.XML (в котором написано read_project_status_response.ReadProjectStatusResult -> __ any), я вижу только

<xs:schema ...>
    ...
</xs:schema> 

часть. Ничего об информации о проекте.

Кто-нибудь знает, почему это происходит и как я могу получить информацию о статусе проекта с помощью gsoap?

Заранее спасибо.


person Hayri Uğur Koltuk    schedule 14.06.2011    source источник


Ответы (1)


Слишком поздно, но вот ...

wsdl, предоставленный сервером проекта, является неполным. Это выглядит так.

  <s:element name="ReadProjectStatusResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="ReadProjectStatusResult">
          <s:complexType>
            <s:sequence>
              <s:any namespace="http://schemas.microsoft.com/office/project/server/webservices/ProjectDataSet/" />
            </s:sequence>
          </s:complexType>
        </s:element>
      </s:sequence>
    </s:complexType>
  </s:element>

Измените его на следующее (обратите внимание на дополнительный элемент s: перед s: any) и перекомпилируйте с помощью gsoap. Теперь gsoap создаст 2 переменные-члены (xsd__schema и __any). xsd__schema будет содержать схему, а __any будет нести правильные данные.

  <s:element name="ReadProjectStatusResponse">
    <s:complexType>
      <s:sequence>
        <s:element minOccurs="0" maxOccurs="1" name="ReadProjectStatusResult">
          <s:complexType>
            <s:sequence>
              <s:element ref="s:schema"/>
              <s:any namespace="http://schemas.microsoft.com/office/project/server/webservices/ProjectDataSet/" />
            </s:sequence>
          </s:complexType>
        </s:element>
      </s:sequence>
    </s:complexType>
  </s:element>
person vishalb    schedule 28.01.2016