Делаю заметку для себя и для всех, кому может быть полезно. Если Ваша 1С не может собрать XDTO и падает с ошибкой, а SoapUI отрабатывает без ошибок.
Ошибка для примера:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу:
Проверка свойства 'id':
форма: Элемент
имя: id
тип: {http://www.w3.org/2001/XMLSchema}integer
Отсутствует обязательное свойство
При этом это не ваша XDTO, и Вы не хотите или не можете поправить его.
Конкретно в моем случае есть схема, у которой некий атрибут может быть не заполненным, тип его не примитивный, и один из подчиненных ему атрибутов примитивного типа обязательно должен быть заполнен. И когда сторонняя система нам возвращает такую схему и включает в нее первый атрибут и при этом не заполняет подчиненный ему атрибут, то 1С встает в позу и падает с ошибкой.
Интересный момент: формально 1С права, но если выполнить вызов такого метода при помощи SoapUI, он отработает без ошибок.
И тут Вы зададитесь вопросом: что же делать?
Я Вам отвечу: Решение есть! Это HTTP-запрос.
Ну что же, погнали:
лСоединение = Новый HTTPСоединение(СерверХТТП);
лЗапрос = Новый HTTPЗапрос(АдресРесурсаХТТП);
лЗапрос.Заголовки.Вставить("Content-Type", ЗаголовокХТТП);
лсТелоКакСтрока = "<soap:Envelope xmlns:soap=""http://www.w3.org/2003/05/soap-envelope"">
| <soap:Header/>
| <soap:Body>
| <ws:getContr>
| <request>
| <employeeSmpId>%1</employeeSmpId>
| <contractualDocumentId>%2</contractualDocumentId>
| </request>
| </ws:getContr>
| </soap:Body>
|</soap:Envelope>";
лсТелоКакСтрока = СтрШаблон(лсТелоКакСтрока, Параметр1, Параметр2);
лЗапрос.УстановитьТелоИзСтроки(лсТелоКакСтрока);
лРезультат = лСоединение.ОтправитьДляОбработки(лЗапрос);
лсТелоКакСтрокаОтвет = лРезультат.ПолучитьТелоКакСтроку();
Чтение = Новый ЧтениеXML;
Чтение.УстановитьСтроку(лсТелоКакСтрокаОтвет);
лОтвет = ФабрикаXDTO.ПрочитатьXML(Чтение);
- http://***Имя Сервера***/***Имя WS***?WSDL - так у вас выглядит ссылка на wsdl
- СерверХТТП = ***Имя Сервера***
- АдресРесурсаХТТП = /***Имя WS***
- ЗаголовокХТТП - это мы берем SoapUI с закладки Raw (сверху под кнопкой пуска есть переключатель закладок XML/Raw)
- лсТелоКакСтрока - сюда мы помещаем весь запрос XML, как он выведен в SoapUI на закладке XML