Помогите победить WSDL

1. lisrws 143 27.07.22 08:24 Сейчас в теме
Есть апи поставщика, работающее через WSDL. необходимо получить информацию по товару, код которого передаем при вызове функции getItem. сам код:

ssl = Новый ЗащищенноеСоединениеOpenSSL;
Определение = Новый WSОпределения("https://econnector.elit.cz/InterCompany-1.75.0/BuyerService?wsdl",,,,, ssl);
Прокси = Новый WSПрокси(Определение, "http://buyer.elit.cz/", "BuyerService", "BuyerPort",,, ssl);
Товар = Прокси.getItem("ELIT_UA", "CKV954434", "994791", "TD ZL01-50-015");

на последней строчке вылетает ошибка:

{ВнешняяОбработка.ВнешняяОбработка1.Форма.Форма.Форма(21)}: Ошибка при вызове метода контекста (getItem)
Товар = Прокси.getItem("ELIT_UA", "CKV954434", "994791", "TD ZL01-50-015");
по причине:
При вызове веб-сервиса произошла ошибка. Ошибка вызова операции сервиса: {http://buyer.elit.cz/}:BuyerService:getItem()
по причине:
При вызове веб-сервиса произошла ошибка. Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://buyer.elit.cz/}item - [1,504]
Проверка дополнительного свойства:
форма: Элемент
имя: activeNo
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://buyer.elit.cz/}item - [1,504]
Проверка дополнительного свойства:
форма: Элемент
имя: activeNo
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://buyer.elit.cz/}item

нагуглил, что такое бывает когда структура ответа не совпадает со структурой описания ответа в xdto. пинал разрабов с той стороны, но они не смогли дать ответ в чем расхождения. может кто-то подскажет как обойти эту ошибку или как решить эту задачу через HTTPСоединение?
делал на платформе 8.3.13.1926 и на 8.3.20.1674. результат один
Вознаграждение за ответ
Показать полностью
Найденные решения
7. laperuz 46 27.07.22 09:31 Сейчас в теме
(5)Для получения через REST работает такой код:

Соединение = Новый HTTPСоединение("econnector.elit.cz",,"CKV954434", "994791",,, ssl);	
Запрос = Новый HTTPЗапрос("InterCompany-1.75.0/BuyerService");
Запрос.Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");	
СтрокаSOAP = "<soap:Envelope xmlns:wsu=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"" xmlns:wsp=""http://www.w3.org/ns/ws-policy"" xmlns:wsp1_2=""http://schemas.xmlsoap.org/ws/2004/09/policy"" xmlns:wsam=""http://www.w3.org/2007/05/addressing/metadata"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tns=""http://buyer.elit.cz/"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" ><soap:Body><mns1:getItem xmlns:mns1=""http://buyer.elit.cz/""><company>ELIT_UA</company><login>CKV954434</login><pas­sword>994791</password><activeItemNo>TD ZL01-50-015</activeItemNo></mns1:getItem></soap:Body></soap:Envelope>";
	
	Запрос.УстановитьТелоИзСтроки(СтрокаSOAP);
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. tolyan_ekb 104 27.07.22 08:31 Сейчас в теме
"http://buyer.elit.cz/" - http или https без разницы?
3. lisrws 143 27.07.22 08:34 Сейчас в теме
(2)http://buyer.elit.cz/ - так указано в описании по WSDL ссылке.
Прикрепленные файлы:
4. laperuz 46 27.07.22 08:46 Сейчас в теме
Странно, у меня все хорошо отработало.
8.3.21.1302
Прикрепленные файлы:
5. lisrws 143 27.07.22 09:02 Сейчас в теме
6. laperuz 46 27.07.22 09:14 Сейчас в теме
(5)На 8.3.20 у меня тоже работает, поэтому думается, что не в платформе дело
7. laperuz 46 27.07.22 09:31 Сейчас в теме
(5)Для получения через REST работает такой код:

Соединение = Новый HTTPСоединение("econnector.elit.cz",,"CKV954434", "994791",,, ssl);	
Запрос = Новый HTTPЗапрос("InterCompany-1.75.0/BuyerService");
Запрос.Заголовки.Вставить("Content-Type", "text/xml; charset=utf-8");	
СтрокаSOAP = "<soap:Envelope xmlns:wsu=""http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"" xmlns:wsp=""http://www.w3.org/ns/ws-policy"" xmlns:wsp1_2=""http://schemas.xmlsoap.org/ws/2004/09/policy"" xmlns:wsam=""http://www.w3.org/2007/05/addressing/metadata"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:tns=""http://buyer.elit.cz/"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" ><soap:Body><mns1:getItem xmlns:mns1=""http://buyer.elit.cz/""><company>ELIT_UA</company><login>CKV954434</login><pas­sword>994791</password><activeItemNo>TD ZL01-50-015</activeItemNo></mns1:getItem></soap:Body></soap:Envelope>";
	
	Запрос.УстановитьТелоИзСтроки(СтрокаSOAP);
	Ответ = Соединение.ОтправитьДляОбработки(Запрос);
8. lisrws 143 27.07.22 10:56 Сейчас в теме
(7) на 21м релизе действительно зарабоало. хттп тоже работает. спасибо огромное
9. gml 27.07.22 12:42 Сейчас в теме
XDTO-объекты в 1С и xsd-схемы XML- вещи хотя и похожие, но совпадают они не во всех деталях.
Вполне возможно, что в новых версиях платформы 1С стала по-другому преобразовывать схемы в XDTO-объекты и ошибка ушла сама собой.
Если Вас интересует причина, по которой не работала платформа 8.3.13, можно:
- создать в конфигурации 8.3.13 WS-ссылку из этого описания;
- получить ответ по REST;
- попытаться на фабрике XDTO из ссылки из текста ответа получить XDTO-объект.

Ошибки, возникающие при работе фабрики, дадут возможность сделать выводы о конкретной несовместимости схемы и указать владельцам сервиса на них.
10. gml 27.07.22 19:31 Сейчас в теме
Проверил работоспособность кода на платформе версии 8.3.13.1690 (у меня другой нет).
Всё работает без ошибок.

С помощью Fiddler получил текст, который присылает web-сервис в ответе на запрос POST:

<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:getItemResponse xmlns:ns2="http://buyer.elit.cz/" xmlns:ns3="http://rglEdiWs.ws.ediplusfrontend.ediplus.elit.cz/"><return><activeNo>TD ZL01-50-015</activeNo><description>Дзеркало</description><discountCa­tegoryCode></discountCategoryCode><internalNo>TD ZL01-50-015</internalNo><itemCategory>5004</itemCategory><itemGroup>­500401</itemGroup><oe>false</oe><unitPrice>893.81</unitPrice><vat>20</vat><vehicleCalss1>WEST</vehicleCalss­1><vehicleClass2>LKW</vehicleClass2><vendor>TANGDE</vendor><­/return></ns2:getItemResponse></S:Body></S:Envelope>

PS
В схеме пространства имен "http://buyer.elit.cz/" элемент activeNo имеет тип String. Судя по описанию WSDL, значение этого элемента равно значению четвёртого параметра метода getItem().
11. gml 31.07.22 23:54 Сейчас в теме
Попробовал сделать запрос по заведомо отсутствующему коду товара - сервис работает без ошибок.

Запрос:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<m:getItem xmlns:m="http://buyer.elit.cz/">
<company xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">ELIT_UA</company>
<login xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">CKV954434</login>
<password xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">994791</password>
<activeItemNo xmlns=""
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">Гарри Поттер</activeItemNo>
</m:getItem>
</soap:Body>
</soap:Envelope>

Ответ:

<?xml version='1.0' encoding='UTF-8'?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/"><S:Body><ns2:getItemResponse xmlns:ns2="http://buyer.elit.cz/" xmlns:ns3="http://rglEdiWs.ws.ediplusfrontend.ediplus.elit.cz/"><return><oe>false</oe><unitPrice>0.0</unitPrice><vat>0</vat></return></ns2:getItemResponse></S:Body></S:Envelope>

Ответ принят без ошибок и помещён в XDTO-объект типа item.
В ответе присутствуют только обязательные реквизиты типа item.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот