Имя: Пароль:
1C
1С v8
Коллеги, помогите с soap сообщением.
0 koreav
 
23.07.12
11:38
Обращаюсь к сторонней 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С-ка добавляла явно ns?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший