gSoap EWS «Проверка схемы ошибок»

У меня есть некоторые проблемы с ews (gSoap) для операции GetServerTimeZones.

мой код клиента:

//request
ews__GetServerTimeZonesType *zoneReq = new ews__GetServerTimeZonesType();
zoneReq->Ids = new ns1__NonEmptyArrayOfTimeZoneIdType();
zoneReq->Ids->Id.push_back("Eastern Standard Time");

bool val = false;
zoneReq->ReturnFullTimeZoneData = &val;

//response
__ews__GetServerTimeZonesResponse resp;if( proxy->GetServerTimeZones(zoneReq, resp) == SOAP_OK)
std::cout <<  "Works!!" << std::endl;

После успешной компиляции, когда она запускается, у меня появляется ошибка мыла:

SOAP 1.1 fault: ns1:ErrorSchemaValidation[no subcode]
"The request failed schema validation: This is an invalid xsi:type 'http://schemas.microsoft.com/exchange/services/2006/messages:GetServerTimeZonesType'." Detail: <e:ResponseCode xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">ErrorSchemaValidation</e:ResponseCode>

Отправленный журнал это:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:ews="http://schemas.microsoft.com/exchange/services/2006/messages">
<SOAP-ENV:Body>
<ews:GetServerTimeZones xsi:type="ews:GetServerTimeZonesType">
<ews:Ids>
<ns1:Id>Eastern Standard Time</ns1:Id>
</ews:Ids>
</ews:GetServerTimeZones>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

и ПОЛУЧИТЬ журнал это:

HTTP/1.1 500 Internal Server Error
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode xmlns:a="http://schemas.microsoft.com/exchange/services/2006/types">a:ErrorSchemaValidation
</faultcode>
<faultstring xml:lang="en-US">The request failed schema validation: This is an invalid xsi:type 'http://schemas.microsoft.com/exchange/services/2006/messages:GetServerTimeZonesType'.
</faultstring>
<detail>
<e:ResponseCode xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">ErrorSchemaValidation
</e:ResponseCode>
<e:Message xmlns:e="http://schemas.microsoft.com/exchange/services/2006/errors">The request failed schema validation.
</e:Message>
<t:MessageXml xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
<t:LineNumber>2</t:LineNumber>
<t:LinePosition>396</t:LinePosition>
<t:Violation>This is an invalid xsi:type 'http://schemas.microsoft.com/exchange/services/2006/messages:GetServerTimeZonesType'.</t:Violation>
</t:MessageXml>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>

Что я здесь не так делаю? Любая помощь приветствуется. Если вы хотите больше кода, я предоставлю вам это тоже. Спасибо.

ОБНОВИТЬ:
Фактический XML-файл для запроса:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:ns1="http://schemas.microsoft.com/exchange/services/2006/types"xmlns:ews="http://schemas.microsoft.com/exchange/services/2006/messages">
<SOAP-ENV:Header>
<ns1:MailboxCulture></ns1:MailboxCulture>
<ns1:RequestServerVersion Version="Exchange2013_SP1">
</ns1:RequestServerVersion>
</SOAP-ENV:Header>
<SOAP-ENV:Body>
<ews:GetServerTimeZones ReturnFullTimeZoneData="false">
<ews:Ids>
<ns1:Id></ns1:Id>
<ns1:Id></ns1:Id>
</ews:Ids>
</ews:GetServerTimeZones>

</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Но в файле SENT log есть ReturnFullTimeZoneData="false" отсутствует, так что я не уверен в этом, может ли это быть причиной этой проблемы?

ОБНОВЛЕНИЕ (2):

Вот таблица отображения пространства имен

#include "soapH.h"SOAP_NMAC struct Namespace namespaces[] =
{
{"SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/", "http://www.w3.org/*/soap-envelope", NULL},
{"SOAP-ENC", "http://schemas.xmlsoap.org/soap/encoding/", "http://www.w3.org/*/soap-encoding", NULL},
{"xsi", "http://www.w3.org/2001/XMLSchema-instance", "http://www.w3.org/*/XMLSchema-instance", NULL},
{"xsd", "http://www.w3.org/2001/XMLSchema", "http://www.w3.org/*/XMLSchema", NULL},
{"ns1", "http://schemas.microsoft.com/exchange/services/2006/types", NULL, NULL},
{"ews", "http://schemas.microsoft.com/exchange/services/2006/messages", NULL, NULL},
{NULL, NULL, NULL, NULL}
};

Может ли кто-нибудь сказать мне, нужно ли вносить изменения в эту таблицу или нет? благодарю вас.

-1

Решение

Без доступа к сообщениям и схемам типов мой комментарий является лишь лучшим предположением. Во-первых, поскольку схема типов отделена от схемы сообщений, я подозреваю, что ews неправильный префикс пространства имен, используемый в xsi:type из ns1:id и должно быть ns1, Во-вторых, возможно, xsi:type происходит там из-за наследования / расширения от базового типа. Мое предложение состоит в том, чтобы бежать wsdl2h с опцией -P удалить ненужное xsi:type атрибуты, которые происходят из производных от xsd:anyType корневой тип. Если это не помогает, попробуйте флаг времени выполнения SOAP_XML_NOTYPE инициализировать soap контекст, который удалит все xsi:type атрибутов. Но остерегаться что десериализация производных типов (которые требуют xsi:type не удастся. Если серьезно, то xsi:type устанавливается в соответствии с определением схемы этого типа, поэтому могут быть несоответствия с этими определениями и API-интерфейсом получателя восходящего потока данных.

0

Другие решения

Кажется, я не в состоянии получить схемы для какой-либо версии EWS, но я бы спросил ews:GetServerTimeZonesType имеет правильный префикс пространства имен. Я ожидаю, что это будет typeне message (что бы это различие не значило), но ews связан с http://schemas.microsoft.com/exchange/services/2006/messages,

Я также не знаю библиотеку, которую вы используете, но в ней, похоже, нет ничего, что дало бы вам возможность контролировать добавление этой библиотеки. xsi:type аннотации, и, кажется, делает это сам. Так что здесь все еще происходит что-то загадочное для меня.

0

По вопросам рекламы [email protected]