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?
Заранее спасибо.
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>