|
Отправка 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 передавать какие-то структурированные данные?
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |