Имя: Пароль:
1C
 
Отправка XML в web-сервис используя SoapUI
0 Necessitudo
 
10.09.15
15:42
Всем привет. Сделал веб-сервис, сделал xdto-пакет:

<xs:schema xmlns:tns="http://www.tehnosila.ru/PaymentOrder"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; targetNamespace="http://www.tehnosila.ru/PaymentOrder"; attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:complexType name="HeaderData">
        <xs:sequence>
            <xs:element name="SHOP" type="xs:string" nillable="true"/>
        </xs:sequence>
    </xs:complexType>
</xs:schema>

Вызываю веб-сервис из SoapUI, передаю туда такой кусочек:

<?xml version="1.0"?>
<SHOP = 3666>
</SHOP>


Получаю ошибку:

  <faultstring>Неизвестная ошибка. Ошибка разбора XML:  - [6,9]
Фатальная ошибка:
XML declaration allowed only at the start of the document

по причине:
Ошибка разбора XML:  - [6,9]
Фатальная ошибка:
XML declaration allowed only at the start of the document</faultstring>

А что не так? Какой тогда текст нужно передавать в веб-сервис?
1 gigi789
 
10.09.15
15:44
(0) <SHOP >3666
</SHOP>
2 Necessitudo
 
10.09.15
15:46
(1) Нет
3 gigi789
 
10.09.15
15:48
(2) нажми alt- v
4 Necessitudo
 
10.09.15
15:51
(3) А, первая строчка была лишней:)


<soap:Text xml:lang="ru_RU">Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.tehnosila.ru/PaymentOrder}HeaderData - [11,4]
Проверка дополнительного свойства:
    форма: Элемент
    имя: SHOP
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.tehnosila.ru/PaymentOrder}HeaderData - [11,4]
Проверка дополнительного свойства:
    форма: Элемент
    имя: SHOP
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://www.tehnosila.ru/PaymentOrder}HeaderData</soap:Text>;
5 Serginio1
 
10.09.15
15:54
А почему не проверить прямо из 1С?
6 Necessitudo
 
10.09.15
15:57
(5) Потому что думаю что моя ошибка очень очевидна и она почти наверняка в  моей схеме.
7 Serginio1
 
10.09.15
16:02
ОпределениеТ=Новый WSОпределения(ПутьК_wsdl);
    WSСервис=ОпределениеТ.Сервисы[0];
    прокси=Новый WSПрокси(ОпределениеТ, WSСервис.URIПространстваИмен, WSСервис.Имя, WSСервис.ТочкиПодключения[0].Имя);

Фабрика=Прокси.ФабрикаXdto();
Тип=Фабрика.Тип("http://www.tehnosila.ru/PaymentOrder","HeaderData";);

Значение=Фабрика.Создать(тип);
Значение.Shop="3666";
Прокси.Метод(Значение);
8 palsergeich
 
10.09.15
16:07
ММММ а где корневой элемент XML?
9 Necessitudo
 
10.09.15
16:09
(7) Я сделал фабрикуxdto в 1С, получил на выходе такую строку:

<HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
    <SHOP>1111</SHOP>
</HeaderData>

Перекинул ее в SoapUI и получил ошибку:

  <soap:Text xml:lang="ru_RU">Неизвестная ошибка. Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.tehnosila.ru/PaymentOrder}HeaderData - [12,4]
Проверка дополнительного свойства:
    форма: Элемент
    имя: {http://www.tehnosila.ru/PaymentOrder}HeaderData
по причине:
Ошибка преобразования данных XDTO:
Чтение объекта типа: {http://www.tehnosila.ru/PaymentOrder}HeaderData - [12,4]
Проверка дополнительного свойства:
    форма: Элемент
    имя: {http://www.tehnosila.ru/PaymentOrder}HeaderData
по причине:
Ошибка проверки данных XDTO:
Структура объекта не соответствует типу: {http://www.tehnosila.ru/PaymentOrder}HeaderData</soap:Text>;
10 palsergeich
 
10.09.15
16:11
targetNamespace="http://www.tehnosila.ru/PaymentOrder";;
пространство имен описано в фабрике?
И странно что формируемый элемент не содержит корневого узла
11 palsergeich
 
10.09.15
16:11
формируемы XML точнее
12 Necessitudo
 
10.09.15
16:15
(7)

{Форма.Форма.Форма(16)}: Ошибка при вызове метода контекста (RegisterPayment)
    Прокси.RegisterPayment(Обр);
по причине:
Ошибка вызова операции сервиса:  {http://www.tehnosila.ru/PaymentOrder}:PaymentOrder:RegisterPayment()
по причине:
Неизвестная ошибка. Несоответствие типов XDTO:
Тип '{http://www.tehnosila.ru/PaymentOrder}HeaderData' не найден
Тип принадлежит пакету, входящему в состав другой фабрики типов XDTO
по причине:
Несоответствие типов XDTO:
Тип '{http://www.tehnosila.ru/PaymentOrder}HeaderData' не найден
Тип принадлежит пакету, входящему в состав другой фабрики типов XDTO
13 palsergeich
 
10.09.15
16:18
Я просто оставлю это здесь. http://catalog.mista.ru/public/167459/
Там 3 статьи.
14 Necessitudo
 
10.09.15
16:19
(13) Читал.
15 palsergeich
 
10.09.15
16:22
16 Serginio1
 
10.09.15
16:22
Так ты фабрику прокси используешь?
Такое бывает если ты используешь вместо

Фабрика=Прокси.ФабрикаXdto();

Используешь
Фабрика=ФабрикаXdto();
17 Serginio1
 
10.09.15
16:23
(16) Ты использовал полностью код из 7?
18 palsergeich
 
10.09.15
16:24
http://catalog.mista.ru/public/193460/ Вот еще хорошо описано
19 Necessitudo
 
10.09.15
16:27
(17) Ура, из 1С все работает!
Но если подставить полученную xml в SoapUI, получается ошибка(
20 palsergeich
 
10.09.15
16:39
<?xml version="1.0"?>
<SHOP = 3666>
</SHOP>

Данный XML НЕ ВАЛИДЕН, нет корневого узла
21 palsergeich
 
10.09.15
16:41
И вы значение присваиваете не атрибуту, а элементу, что тоже является неправильным
22 Necessitudo
 
10.09.15
16:43
(21) Так ругань идет не на валидность, а на ошибку преобразования данных XDTO. Да и если через 1С сделать XDTO и вызвать этот веб-сервис, то все работает.
23 palsergeich
 
10.09.15
16:46
Теоретически вы можете скормить что угодно, но SOAP UI работает с валидными или хотя бы правильно сформированными XML. Ваш XML не валиден изза отсутствия корневого узла и не правильно сформирован изза того что присвоение значения идет не атрибуту, а элементу. так понятно?
24 Necessitudo
 
10.09.15
16:49
(23) Конечно.

Поменял SHOP на атрибут.

<xs:schema xmlns:tns="http://www.tehnosila.ru/PaymentOrder"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; targetNamespace="http://www.tehnosila.ru/PaymentOrder"; attributeFormDefault="unqualified" elementFormDefault="qualified">
    <xs:complexType name="HeaderData">
        <xs:attribute name="SHOP" type="xs:string" use="required"/>
    </xs:complexType>
</xs:schema>


Вот такую XML 1С выдает:

<HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; SHOP="1111"/>

Вот такую XML в SoapUI вставить?

<?xml version="1.0"?>
<HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder"; xmlns:xs="http://www.w3.org/2001/XMLSchema"; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; SHOP="1111"/>
25 palsergeich
 
10.09.15
16:50
И фабрика ждет валидный XML
26 palsergeich
 
10.09.15
16:56
Жесть.
<HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder";; xmlns:xs="http://www.w3.org/2001/XMLSchema";; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;
<Root>
<SHOP ShopNumber = "1111"><SHOP>
</Root>
Вот валидный XML, а то что у Вас, это , у меня даже слов нет
27 palsergeich
 
10.09.15
16:57
<?xml version="1.0"?>
<HeaderData xmlns="http://www.tehnosila.ru/PaymentOrder";;; xmlns:xs="http://www.w3.org/2001/XMLSchema";;; xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">;;
<Root>
<SHOP ShopNumber = "1111"></SHOP>
</Root>
Вот так, точнее
28 Necessitudo
 
10.09.15
16:59
(27)

         <faultstring>Неизвестная ошибка. Ошибка разбора XML:  - [6,8]
Фатальная ошибка:
XML declaration allowed only at the start of the document

по причине:
Ошибка разбора XML:  - [6,8]
Фатальная ошибка:
XML declaration allowed only at the start of the document</faultstring>
         <detail/>
29 Necessitudo
 
10.09.15
17:00
А если без
<?xml version="1.0"?> ,
то такое

         <faultstring>Неизвестная ошибка. Ошибка разбора XML:  - [6,18]
Фатальная ошибка:
error parsing attribute name

по причине:
Ошибка разбора XML:  - [6,18]
Фатальная ошибка:
error parsing attribute name</faultstring>
         <detail/>
30 palsergeich
 
10.09.15
17:02
<?xml version="1.0"?>


<Root>

<SHOP ShopNumber = "1111"></SHOP>

</Root>

<?xml version="1.0"?>  - описание - Оно обязательно
Далее тег Root - Корневой элемент, В вашем случае там идет описание схемы.
31 palsergeich
 
10.09.15
17:03
http://okitgo.ru/xml/proverka-xml.html Вот простейшее описание XML формата.
32 Necessitudo
 
10.09.15
17:05
(31) Ну господи, я знаю что такое xml. Я подставляю в SoapUI то, что выдает мне 1С. Не нужна там похоже валидная XML, ну вроде понятно же уже.
33 Serginio1
 
10.09.15
17:15
(32) Посмотри Фиддлером что отправляется в том и ином случае
34 Багминот
 
10.09.15
17:22
Ну вы даете! :)
То есть вы суете в соап сервис вместо соап-конверта тупо хмл?
35 Necessitudo
 
10.09.15
17:26
(34) А чего тут такого?) 1С ж чует XDTO и даже пытается разбирать.
36 Багминот
 
10.09.15
17:36
(35) Ну ты же хочешь не из 1С-а обращаться к сервису? Тут надо хотя бы в принципе представлять что такое SOAP. Можно вики почитать: https://ru.wikipedia.org/wiki/SOAP

Хотя странно... SoapUI сам правильно формирует запросы, надо только данные подставить вместо "?" в сгенеренную XML-ку.
37 Necessitudo
 
10.09.15
17:45
(36) То есть чисто теоретически возможно в качестве параметра передать XML?
38 Necessitudo
 
10.09.15
17:46
(36) Я сейчас передаю XML как строку, а на выходе общаюсь с ней как с DOM-объектом. Вариант конечно, но не айс)
39 Багминот
 
10.09.15
17:49
(38) А, то есть ты это свою хмл-ку хотя бы внутри соап-конверта передаешь? Тогда надо просто в https://ru.wikipedia.org/wiki/CDATA обернуть.

Но это жуткий изврат, передавать хмл внутри хмл. Не надо так.
40 Necessitudo
 
10.09.15
17:55
(39) Да, так и делаю. Буду знать что это называется CDATA:)
41 Serginio1
 
10.09.15
18:49
(38) Если создашь XML по схеме то и читать можешь тоже по схеме
42 Necessitudo
 
11.09.15
16:49
Так а все-таки, как через SOAP передавать какие-то структурированные данные?
Независимо от того, куда вы едете — это в гору и против ветра!