Как в soap сообщении явно указать каждому типу пространство имен

1. koreav 53 23.07.12 13:08 Сейчас в теме
Обращаюсь к сторонней web-службе:
Определение = Новый WSОпределения("http://appl.dpd.ru:8080/services/geography?wsdl");

Прокси = Новый WSПрокси(Определение, "http://dpd.ru/ws/geography/2012-04-17", "DPDGeographyService", "DPDGeographyPort");

Фабрика = Прокси.ФабрикаXDTO;

Параметры = Фабрика.Создать(Фабрика.Тип("http://dpd.ru/ws/geography/2012-04-17","getTerminalsSelfDelivery"));

Параметры.auth = Фабрика.Создать(Фабрика.Тип("http://dpd.ru/ws/geography/2012-04-17","auth"));

Параметры.auth.clientKey = getClientKey();
Параметры.auth.clientNumber = getClientNumber();

Перехватываю soap сообщение сгенеренное 1С:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

<soap:Header/>
<soap:Body> <getTerminalsSelfDelivery xmlns="http://dpd.ru/ws/geography/2012-04-17"

xmlns:xs="http://www.w3.org/2001/XMLSchema"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

<auth>
<clientNumber>xxx</clientNumber>
<clientKey>xxx</clientKey>
</auth>
</getTerminalsSelfDelivery></soap:Body>
</soap:Envelope>

Результат:
Ошибка SOAP сервера: com.sun.istack.XMLStreamException2: org.xml.sax.SAXParseException: cvc-complex-type.2.4.a: Invalid content was found starting with element 'auth'. One of '{auth}' is expected.

Если добавляю руками (руками в soapui) пространство имен
т.е. вместо
<getTerminalsSelfDelivery xmlns="http://dpd.ru/ws/geography/2012-04-17"

пишу
<nsogogo:getTerminalsSelfDelivery xmlns:nsogogo="http://dpd.ru/ws/geography/2012-04-17"


то все ок.

Как сделать что бы 1С-ка добавляла явно указания пространства имен?

*пожалуйста перенесите тему в нужный раздел
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. fixin 4253 23.07.12 18:06 Сейчас в теме
вы мою статию про СОАП читали тут и веб-сервисы? может там это и есть, не помню, давно курил СОАП.
3. TMV 14 04.03.14 08:10 Сейчас в теме
(0) Проблема решена? Тоже вот наткнулся
4. foka_1s 13 20.03.14 10:32 Сейчас в теме
Решил проблему интеграции с DPD через HTTP-запросы, через wsdl так и не получилось с ними работать
5. koreav 53 25.04.14 14:27 Сейчас в теме
решена DPD ), вот кусок из их гайда, вдруг кому пригодится
Функция ПолучитьТекстЗапросПоЗаказамORDERNUM(Заказы, Заказчик, Ключ)
	ЗаписьXML = Новый ЗаписьXML;
	ЗаписьXML.УстановитьСтроку();
	//ЗаписьXML.ЗаписатьОбъявлениеXML();
	ЗаписьXML.ЗаписатьНачалоЭлемента("soap:Envelope");
	ЗаписьXML.ЗаписатьАтрибут("xmlns:soap", "http://schemas.xmlsoap.org/soap/envelope/");
	ЗаписьXML.ЗаписатьАтрибут("xmlns:ns0", "http://dpd.ru/ws/order2/2012-04-04");
	ЗаписьXML.ЗаписатьНачалоЭлемента("soap:Header");
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("soap:Body");
	ЗаписьXML.ЗаписатьНачалоЭлемента("ns0:getOrderStatus");
	ЗаписьXML.ЗаписатьАтрибут("xmlns:xs", "http://www.w3.org/2001/XMLSchema");
	ЗаписьXML.ЗаписатьАтрибут("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
	ЗаписьXML.ЗаписатьНачалоЭлемента("orderStatus");
	ЗаписьXML.ЗаписатьНачалоЭлемента("auth");
	ЗаписьXML.ЗаписатьНачалоЭлемента("clientNumber");
	ЗаписьXML.ЗаписатьТекст(Заказчик);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьНачалоЭлемента("clientKey");
	ЗаписьXML.ЗаписатьТекст(Ключ);
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьКонецЭлемента();
	Для Каждого Заказ Из Заказы Цикл
		ЗаписьXML.ЗаписатьНачалоЭлемента("order");
		ЗаписьXML.ЗаписатьНачалоЭлемента("orderNumberInternal");
		ЗаписьXML.ЗаписатьТекст(Заказ);
		ЗаписьXML.ЗаписатьКонецЭлемента();
		ЗаписьXML.ЗаписатьКонецЭлемента();
	КонецЦикла;
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ЗаписьXML.ЗаписатьКонецЭлемента();
	ТекстXML = ЗаписьXML.Закрыть();
	Возврат ТекстXML;
КонецФункции
Функция ОтправитьЗапросWEBСервису(URL,ТекстXML,Таймаут = 10000)
	Если ПустаяСтрока(ТекстXML) Тогда
		Возврат "";
	КонецЕсли;
	WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
	WinHttp.SetTimeouts(Таймаут, Таймаут, Таймаут, Таймаут);
	WinHttp.Option(2,"utf-8");
	WinHttp.Open("POST",URL);
	WinHttp.setRequestHeader("Content-Type","text/xml; charset=utf-8");
	Сообщить("Начало - " + ТекущаяДата());
	Сообщить("URL: " + URL);
	//Сообщить("ТекстXML запроса: " + ТекстXML);
	Попытка
		WinHttp.Send(ТекстXML);
		Сообщить("Завершение - " + ТекущаяДата());
		Если WinHttp.Status = 200 Тогда
			Сообщить("Ответ: " + WinHttp.ResponseText);
			Возврат(WinHttp.ResponseText);
		Иначе
			Сообщить("Ошибка сервера: " + WinHttp.Status + " " + WinHttp.ResponseText + " " + WinHttp.StatusText, СтатусСообщения.Важное);
			Возврат("");
		КонецЕсли;
	Исключение
		Сообщить(ОписаниеОшибки(), СтатусСообщения.Важное);
		Возврат("");
	КонецПопытки;
КонецФункции
Показать
6. kraynev-navi 649 14.12.15 15:39 Сейчас в теме
...Еще полтора года спустя.
Да неужто в 1С так и нельзя сделать собственными методами??? Неужто только через XML?
	СообщениеСОАП="<soapenv:Envelope xmlns:soapenv=""http://schemas.xmlsoap.org/soap/envelope/"" xmlns:con=""http://iit.ru/portal/Contraginvoice"">
   |<soapenv:Header/>
   |<soapenv:Body>
   |   <con:DocListRequest>
   |      <cert_sn>222222</cert_sn>
   |      <inn>1111</inn>
   |      <kpp>22</kpp>
   |      <dateafter>"+Формат(ДатаНачала,"ДФ=dd.MM.yyyy")+"</dateafter>
   |      <datebefore>"+Формат(ДатаОкончания,"ДФ=dd.MM.yyyy")+"</datebefore>
   |   </con:DocListRequest>
   |</soapenv:Body>
	|</soapenv:Envelope>";
	
    DOC=New COMОбъект("MSXML2.DOMDocument");
 
    hostName="iit.ru";
    urlAddress="http://iit.ru/IIT/ContrAgInvoice/services/ContrAgInvoice.wsdl";
 
    DOC.loadXML(СообщениеСОАП);
    Если DOC.parseError.errorCode <> 0 Тогда
        Сообщить("Ошибка разбора XML " + DOC.parseError.reason);
        Возврат;
    КонецЕсли;
 
    DOC.save( "сообщение.xml");
 
    xmlHttp = New COMОбъект("MSXML2.xmlHttp");
    xmlHttp.OPEN ("POST", urlAddress, False); // False- отвечает за то, что запрос асинхронный и ожидаем ответа
 
    xmlHttp.setRequestHeader ("Host", hostName);
    xmlHttp.setRequestHeader ("Content-type", "application/soap+xml; charset=""utf-8""");
    xmlHttp.SEND (DOC);
 
    Сообщить("" + xmlHttp.statusText);
 
    DOCToSave=New COMОбъект("MSXML2.DOMDocument");
 
    DOCToSave.loadXML(xmlHttp.responseText);
 
    Если DOCToSave.parseError.errorCode <> 0 Тогда
        Сообщить("Ошибка разбора XML результата: " + DOC.parseError.reason);
        Возврат;
    КонецЕсли; 
 
    DOCToSave.save("GetData.xml");
Показать
Оставьте свое сообщение

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